Подтвердить что ты не робот

Как я могу получить возвращаемое значение части Laravel?

Здесь приведен слишком упрощенный пример, который не работает для меня. Как (используя этот метод, я знаю, что есть лучшие способы, если я действительно хочу получить этот конкретный результат), могу ли я получить общее количество пользователей?

User::chunk(200, function($users)
{
   return count($users);
});

Это возвращает NULL. Любая идея, как я могу получить возвращаемое значение из функции chunk?

Edit:

Здесь может быть лучший пример:

$processed_users = DB::table('users')->chunk(200, function($users)
{
   // Do something with this batch of users. Now I'd like to keep track of how many I processed. Perhaps this is a background command that runs on a scheduled task.
   $processed_users = count($users);
   return $processed_users;
});
echo $processed_users; // returns null
4b9b3361

Ответ 1

Я не думаю, что вы можете достичь того, чего хотите. Анонимная функция вызывается методом chunk, поэтому все, что вы возвращаете из своего закрытия, проглатывается chunk. Так как chunk потенциально вызывает эту анонимную функцию N раз, нет смысла возвращать что-либо обратно из закрытых им замыканий.

Однако вы можете предоставить доступ к переменной с областью действия к закрытию и позволить закрытию записывать это значение, что позволит вам косвенно возвращать результаты. Вы делаете это с помощью ключевого слова use и не забудьте передать переменную с областью действия по ссылке, что достигается с помощью модификатора &.

Это будет работать, например:

$count = 0;
DB::table('users')->chunk(200, function($users) use (&$count)
{
    Log::debug(count($users)); // will log the current iterations count
    $count = $count + count($users); // will write the total count to our method var
});
Log::debug($count); // will log the total count of records