讓我們下面的例子:Laravel在每次夾緊完成後都會執行操作?
User::where('is_active', true)->each(function (User $user){
// do something
}, 500);
所以,如果我有2000個用戶,有沒有辦法,每次做一些用戶端的新塊?
讓我們下面的例子: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