如何获取 Laravel 区块的返回值?

2022-08-30 19:01:58

这是一个过度简化的例子,对我不起作用。如何(使用这种方法,我知道如果我真正想要这个特定结果,有更好的方法),我可以获得用户总数?

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

这将返回 NULL。任何想法如何从块函数获取返回值?

编辑:

下面可能是一个更好的示例:

$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

答案 1

我不认为你可以通过这种方式实现你想要的。匿名函数由 chunk 方法调用,因此从闭包返回的任何内容都会被 吞噬。由于可能会调用此匿名函数 N 次,因此从调用的闭包中返回任何内容是没有意义的。chunkchunk

但是,您可以向闭包提供对方法范围变量的访问,并允许闭包写入该值,这将允许您间接返回结果。使用关键字执行此操作,并确保通过引用传入方法范围的变量,这是通过修饰符实现的。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

答案 2
$regions = array();

Regions::chunk(10, function($users) use (&$regions ) {

    $stickers = array();

    foreach ($users as $user)
    {
        $user->sababu = ($user->region_id > 1)? $user->region_id : 0 ;
        $regions[] = $user;
    }

});

echo json_encode($regions);

推荐