Laravel Eloquent有一个游标方法,允许您使用游标迭代数据库记录,该游标只执行单个查询。处理大量数据时,可以使用游标方法大大减少内存使用量(请参阅https://laravel.com/docs/5.4/eloquent#retrieving-models)。
CakePHP 3有一个高级ORM,有类似Laravel中的光标方法吗?似乎没有在书中提到:https://book.cakephp.org/3.0/en/orm.html
答案 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
。
无缓冲的结果集只能迭代一次,结果无法缓存/序列化。此外,对于包含在单独查询中检索的关联的查询,也不能禁用缓冲(hasMany
和belongsToMany
始终如此)。
另见