Php 为什么each()不使用laravel处理Pull()?

Php 为什么each()不使用laravel处理Pull()?,php,laravel,laravel-5,Php,Laravel,Laravel 5,在我的令牌表中,我有两条记录,但我只需要amount列 $hasToken = $this->hasMany(Token::class, 'user_id', 'id')->pluck('amount')->toArray(); 上面的关系返回两条记录 数组(“0”=>500,“1”=>500,) 我想通过使用laraveleach()或each()函数来增加它们,但不起作用 $hasToken->each(function ($item, $key) use($tot

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

$hasToken = $this->hasMany(Token::class, 'user_id', 'id')->pluck('amount')->toArray();
上面的关系返回两条记录

数组(“0”=>500,“1”=>500,)

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

$hasToken->each(function ($item, $key) use($totalTokens) {
    $totalTokens += $item;
});
此外,我无法尝试使用下面的脚本检查
if语句中的计数

if($hasToken->count() > 0){ ... }

因为它返回了错误。

这里有两件事出错

首先,如果要在集合上执行数组,则不应将集合转换为数组。这是一种针对特定对象的方法

其次,您希望修改一个值
totalTokens
,我假设它超出了您的范围

所以,您应该通过引用来传递它。以下几点应该行得通

$totalTokens = 2; 

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

dd($totalTokens); // outputs 1002
另外,
$hasToken->count()
应该还能工作

编辑:
运算符表示此变量正被添加到闭包中


如果省略
&
,则表示
$totalTokens
按值传递给闭包。换句话说,它被复制到闭包中。您将对
$totalTokens
执行的任何操作都不会超出其范围

这里有两件事不对

首先,如果要在集合上执行数组,则不应将集合转换为数组。这是一种针对特定对象的方法

其次,您希望修改一个值
totalTokens
,我假设它超出了您的范围

所以,您应该通过引用来传递它。以下几点应该行得通

$totalTokens = 2; 

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

dd($totalTokens); // outputs 1002
另外,
$hasToken->count()
应该还能工作

编辑:
运算符表示此变量正被添加到闭包中


如果省略
&
,则表示
$totalTokens
按值传递给闭包。换句话说,它被复制到闭包中。您将对
$totalTokens
执行的任何操作都不会超出其范围

尝试
collect($hasToken)->每个(函数($item,$key)使用($totalTokens){$totalTokens+=$item;})
$hasToken=collect($this->hasMany(Token::class,'user_id','id')->pull('amount')->toArray())
try
collect($hasToken)->每个(函数($item,$key)使用($totalTokens){$totalTokens+=$item;})
$hasToken=collect($this->hasMany(Token::class,'user_id','id')->pull('amount')->toArray())什么是
&
的意思?编辑我的答案以便更好地解释:)什么是
&
的意思?编辑我的答案以便更好地解释:)