CakePHP 3批处理查询以减少内存

时间:2017-05-17 12:20:23

标签: cakephp orm cakephp-3.0 query-builder

Laravel Eloquent有一个游标方法,允许您使用游标迭代数据库记录,该游标只执行单个查询。处理大量数据时,可以使用游标方法大大减少内存使用量(请参阅https://laravel.com/docs/5.4/eloquent#retrieving-models)。

CakePHP 3有一个高级ORM,有类似Laravel中的光标方法吗?似乎没有在书中提到:https://book.cakephp.org/3.0/en/orm.html

1 个答案:

答案 0 :(得分:3)

我不知道Laravel中cursor()和非cursor()用法之间的区别究竟是什么(除了显而易见的),但在CakePHP中您可能正在寻找Query::bufferResults(),分别为Query::enableBufferedResults()(自CakePHP 3.4起)。

$query->bufferResults(false)
$query->enableBufferedResults(false)

禁用结果缓冲将阻止结果集在内存中缓冲,对于MySQL,它也将禁用MYSQL_ATTR_USE_BUFFERED_QUERY

无缓冲的结果集只能迭代一次,结果无法缓存/序列化。此外,对于包含在单独查询中检索的关联的查询,也不能禁用缓冲(hasManybelongsToMany始终如此)。

另见