Laravel在每次夹紧完成后都会执行操作?
问题描述:
让我们下面的例子:Laravel在每次夹紧完成后都会执行操作?
User::where('is_active', true)->each(function (User $user){
// do something
}, 500);
所以,如果我有2000个用户,有没有办法,每次做一些用户端的新块?
答
User::where('is_active', true)->chunk(500, function (Collection $users) {
$users->each(function (User $user) {
// Do per-user stuff here
});
// Do per-chunk stuff here
}
这应该做的伎俩。请记住,最后一个块可能包含少于500个用户。如果必须精确到每500,请检查收集大小;
User::where('is_active', true)->chunk(500, function (Collection $users) {
$users->each(function (User $user) {
// Do per-user stuff here
});
if ($users->count() == 500) {
// Do per-chunk stuff here
}
}
希望这会有所帮助。
答
如果你想使用each()
帮手,你需要手动完成。难道是这样的:
$counter = 0;
$chunk = 500;
User::where('is_active', true)->each(function (User $user) use(&$counter, $chunk) {
// Do stuff for each user.
$counter += 1;
if ($counter === $chunk) {
$counter = 0;
// Do something after each chunk.
$this->doSomething();
}
}, $chunk);
if (!$counter)
// Do something for the last chunk.
$this->doSomething();
}
我想知道你测试了吗?因为在''each()'调用'chunk()'的引擎下,所以你的代码就像'chunk()调用调用chunk()的each()。 –
我测试过了。 'each()'调用'chunk()',但'chunk()'不调用each()'是正确的。通过直接调用'chunk()',你可以控制回调参数。 – Sydgren