次の例をみましょう:私は2000人のユーザーを持っている場合チャーティングが完了したら、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);
だから、何かにユーザーの新しいチャンクが終了するたびに行うための方法ですが?
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