当我使用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
吗?
由于
答案 0 :(得分:0)
据我所知,处理CActiveRecord时没有这样的事情。即使有这样的选项,php仍然需要将对象存储在某个地方,就像CDbDataReader的工作方式一样,除非使用了无缓冲的查询(这会对数据库服务器造成压力)。
您需要尝试使用已加载的对象减少内存占用(仅选择您需要的内容,如果需要,只选择延迟加载关系)或坚持使用查询构建器以进一步减少内存使用。
答案 1 :(得分:0)
你可以添加$ criteria-> limit = 100,然后你不会超过内存大小。