Здесь есть пара вещей не так.
Во-первых, вы не должны конвертировать свою коллекцию в массив, если вы хотите выполнить 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()
должен снова работать.
Редактировать: оператор &
обозначает, что эта переменная передается ссылкой в замыкание.
Если вы опустите &
, это означает, что $totalTokens
передается по значению в замыкание. Другими словами, оно копируется в закрытие. Любые операции, которые вы будете выполнять с $totalTokens
, не будут известны за его пределами.