2016-07-20 22 views
0

Wenn ich findAll() Funktion es retuns ein Array von CActiveRecordobjects, aber wenn ich einen Export auf große Datenmengen zu tun haben, diese array überschreiten memory size erlaubt.Yü Modell findAll memory_limit

Zum Beispiel:

$criteria = new CDbCriteria(); 
$criteria->with = array('relation_a', 'relation_b'); 
$criteria->condition = "condition_a=:a AND condition_b=:b"; 
$data = MyModel::model()->findAll($criteria); 

Jetzt $data ist ein Array von active record. Kann ich etwas wie CDbDataReader haben, um MyModel eins nach dem anderen zu bekommen?

Dank

Antwort

0

Soweit ich weiß, ist es nicht so etwas, wenn sie mit CActiveRecord tun. Selbst wenn es eine solche Option gäbe, müsste php Ihre Objekte immer noch irgendwo speichern, genauso wie CDbDataReader funktioniert, wenn nicht ungepufferte Abfragen verwendet werden (was wiederum Ihren Datenbankserver belasten würde). Sie müssen entweder versuchen, den Speicherbedarf mit Ihren geladenen Objekten zu reduzieren (wählen Sie nur das aus, was Sie benötigen, verwenden bei Bedarf Lazy-Load-Beziehungen) oder halten Sie sich an den Abfrage-Generator, um die Speicherauslastung weiter zu reduzieren.

0

Sie können $ criteria-> limit = 100 hinzufügen, und dann werden Sie nicht über Speichergröße.