estoy usando una aplicación concreta de Zend_Db_Table_Abstract:Zend_Db_Table_Abstract concreta para iterar eficientemente a través de un conjunto de filas
class DB_TestClass extends Zend_Db_Table_Abstract {
protected $_name = "test.TestData";
}
Si quiero seleccionar todas las filas de la tabla, me parece que tienen una opción:
$t = new DB_TestClass;
$rowset = $t->fetchAll();
Esto devuelve una instancia de Zend_Db_Table_Rowset que tiene una interfaz iterable puede recorrer sin embargo y acceder a cada entrada de fila como una instancia rowClass:
foreach($rowset as $row) {
var_dump($row);
}
SIN EMBARGO, el conjunto de filas ha cargado cada fila de la base de datos en la memoria (!) En tablas pequeñas esto está bien, pero en tablas grandes - miles de filas, por ejemplo - agota rápidamente la memoria disponible para PHP y el script muere .
¿Cómo puedo, usando Zend_Db, recorrer el conjunto de resultados recuperando una fila de un identificador de instrucciones a la vez, ala mysql_fetch_assoc()? Esto permitiría un acceso eficiente a cualquier cantidad de filas (miles, millones) sin usar una cantidad excesiva de memoria.
Gracias de antemano por cualquier sugerencia.
Hacer esto significa que pierde la funcionalidad de patrón de puerta de acceso de fila (por lo que en cada $ fila, ya no puede hacer: '$ fila-> campo = "nuevo valor"; $ fila-> guardar();'), que es uno de los beneficios de usar Zend_Db. ¿Hay alguna manera de volver a utilizar su sugerencia anterior? –
Ver mi actualización. Deberia de funcionar. – akond
Ah, y por cierto, eche un vistazo a Zend_Db_Table_Select. Probablemente te quede mejor. – akond