我想以块的形式获取数据,例如第一次尝试从 1 到 50 条记录,第二次尝试从 51 到 100 条记录。我看到了关于块 () 的 laravel 文档,但没有自定义偏移量的规定。
我认为你不需要在这里构建一些自定义的东西。使用标准chunk()
应该真正适合您:
Model::chunk(50, function ($many) {
foreach ($many as $one) {
....
}
});
更新
如果要从外部向Laravel发送page
号码(如1,2,3),可以使用skip()
和take()
:
Model::skip(($page - 1) * 50)->take(50)->get();
我也有类似的问题。需要在 192k 记录表上使用具有大量联接的大型查询。这是我所做的:
查询是这样的:
DB::connection('mysql')
->table('table1 as A')
->join(
'table2 as B',
'A.Provincia',
'=',
'B.IdProvincia'
)
->select(
'A.NoExpediente',
...
'A.FechaCita'
)
->orderBy('NoExpediente')
// here goes the offset
->chunk(function ($records) use (&$offset) {
foreach ($records as $record) {
if ($offset > 0) {
$offset--;
continue;
}
// do something with $record
}
);
我知道解决方案并不理想,因为无论如何记录都是从数据库带来的,但它为我节省了很多处理// do something with $record
跳过的。