为什么each()在使用laravel的pluck()中不起作用?

时间:2019-01-13 09:27:15

标签: php laravel laravel-5

在令牌表中,我有两条记录,但是我只需要amount列。

$hasToken = $this->hasMany(Token::class, 'user_id', 'id')->pluck('amount')->toArray();

以上关系返回两个记录

  

array(“ 0” => 500,“ 1” => 500,)

我想通过使用laravel each()every()函数来添加它们,但是不起作用

$hasToken->each(function ($item, $key) use($totalTokens) {
    $totalTokens += $item;
});

我也无法尝试使用以下脚本

检查if-statement中的计数
if($hasToken->count() > 0){ ... }

因为它返回错误。

1 个答案:

答案 0 :(得分:2)

这里有些错误。

首先,如果要对其执行each(),则不应将集合转换为数组。这是Laravel Collections特有的方法。

$hasToken = $this->hasMany(Token::class, 'user_id', 'id')->pluck('amount');

第二,您想修改一个值totalTokens,我认为它不在您的范围内。

因此,您应该通过引用将其传递。以下应该工作。

$totalTokens = 2; 

$hasToken->each(function ($item, $key) use(&$totalTokens) {
    $totalTokens += $item;
});

dd($totalTokens); // outputs 1002

$hasToken->count()也应该重新工作。

编辑:&运算符表示此变量在闭包中passed by referenced

如果省略&,则意味着$totalTokens按值传递给闭包。换句话说,它被复制到闭包中。在$totalTokens范围内不会进行任何操作。