我想知道 laravel 块和 laravel 游标方法有什么区别。哪种方法更适合使用?它们的用例是什么?我知道你应该使用游标来节省内存,但它在后端是如何工作的呢?
带有示例的详细解释会很有用,因为我在 stackoverflow 和其他网站上进行了搜索,但没有找到太多信息。
这是 laravel 文档中的代码片段。
分块结果
Flight::chunk(200, function ($flights) {
foreach ($flights as $flight) {
//
}
});
使用游标
foreach (Flight::where('foo', 'bar')->cursor() as $flight) {
//
}
原文由 Suraj 发布,翻译遵循 CC BY-SA 4.0 许可协议
事实上,这个问题可能会吸引一些固执己见的答案,但是 Laravel Docs 中提供了简单的答案
仅供参考:
这是块:
这是游标:
Chunk 从数据库中检索记录,并将其加载到内存中,同时将游标设置在检索到的最后一条记录上,这样就不会发生冲突。
所以这里的好处是,如果你想在 大 记录发出前重新格式化,或者你想每次对第n条记录进行操作,那么这很有用。一个例子是,如果您正在构建一个视图输出/excel 表,那么您可以记录计数直到它们完成,这样它们就不会立即加载到内存中,从而达到内存限制。
Cursor 使用 PHP 生成器,您可以查看 php 生成器 页面,但这里有一个有趣的标题:
虽然我不能保证我完全理解 Cursor 的概念,但是对于 Chunk,chunk 在每个记录大小上运行查询,检索它,并将它传递到闭包中以进一步处理记录。
希望这是有用的。