2016-07-20 8 views
0

Когда я использую функцию findAll() это retuns массива CActiveRecordobjects, но когда я должен сделать экспорт на больших данных в этом array превышает предельно допустимые memory size.Yii модели FindAll memory_limit

Например:

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

Теперь $data является массивом active record. Могу ли я что-то вроде CDbDataReader получить MyModel один за другим?

Благодаря

ответ

0

Насколько я знаю, нет такой вещи, когда дело с CActiveRecord. Даже если бы существовал такой вариант, php все равно должен был хранить ваши объекты где-то, как работает CDbDataReader, если не использовались небуферизованные запросы (которые затем помещают нагрузку на ваш сервер базы данных).

Вам нужно либо попытаться уменьшить объем памяти с загруженными объектами (выберите только то, что вам нужно, ленивые отношения нагрузки, если это необходимо), либо придерживаться построителя запросов, чтобы еще больше уменьшить использование памяти.

0

Вы можете добавить $ criteria-> limit = 100, и тогда вы не будете иметь размер памяти.

Смежные вопросы