Когда я использую findAll()
функционировать это retuns
массив CActiveRecord
objects
, но когда я должен сделать экспорт больших данных, это array
превышать допустимый memory size
,
Например:
$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
по одному?
Спасибо
Насколько я знаю, при работе с CActiveRecord такого не бывает. Даже если бы была такая опция, php все равно нужно было бы где-то хранить ваши объекты, точно так же, как работает CDbDataReader, если только не были использованы небуферизованные запросы (что затем привело бы к нагрузке на ваш сервер базы данных).
Вам нужно либо попытаться уменьшить объем используемой памяти с загруженными объектами (выберите только то, что вам нужно, ленивые отношения загрузки при необходимости), либо придерживаться построителя запросов, чтобы еще больше сократить использование памяти.
Вы можете добавить $ критерии-> limit = 100, и тогда у вас не будет больше объема памяти.