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

Php 如何获取Laravel块的返回值?,php,laravel,Php,Laravel,这里有一个过于简化的例子,对我来说并不适用。如何(使用这种方法,我知道如果我真的想要这个特定的结果,有更好的方法),我可以得到用户总数 User::chunk(200, function($users) { return count($users); }); 这将返回NULL。知道如何从chunk函数中获取返回值吗 编辑: 下面可能是一个更好的例子: $processed_users = DB::table('users')->chunk(200, function($users)

这里有一个过于简化的例子,对我来说并不适用。如何(使用这种方法,我知道如果我真的想要这个特定的结果,有更好的方法),我可以得到用户总数

User::chunk(200, function($users)
{
   return count($users);
});
这将返回NULL。知道如何从chunk函数中获取返回值吗

编辑:

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

$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

我认为你不能用这种方式实现你想要的。匿名函数由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

等等,你想得到用户总数,你不需要任何数据吗?这似乎不是最有效的方法that@Ohgodwhy我试图得到chunk函数的结果。请忽略示例的细节。@Ohgod为什么我添加了另一个示例。嗯。我在自己的模型上试过,我也遇到过类似的问题。我想知道为什么。我想您总是可以先查询所有用户的数量,然后对查询进行分页,但这似乎是chunk应该做的事情+1.让我们看看还有谁知道为什么RJ Lohan的方法有效。有点酷。感谢您的故障排除!如果您需要更精细的控制,您还可以使用类的属性(在您的示例中,$this->count),并在块的闭包中增加它。对于那些发现这对他们不起作用的人,对我来说,计数将重置每个块循环。我忘了将
&
参数添加到
use
语句中。如果您添加它将正常工作。未使用$stickers数组,应将其删除以避免混淆
$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);