Почему each () не работает с pluck () с помощью laravel? - PullRequest
0 голосов
/ 13 января 2019

В моей таблице токенов есть две записи, но мне нужен только столбец amount.

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

Выше отношение возвращает две записи

массив ("0" => 500, "1" => 500,)

Я хочу добавить их, используя функцию laravel each() или every(), но не работает

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

Также я не могу проверить количество в if-statement, используя приведенный ниже скрипт

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

потому что он возвращает ошибку.

1 Ответ

0 голосов
/ 13 января 2019

Здесь есть пара вещей не так.

Во-первых, вы не должны конвертировать свою коллекцию в массив, если вы хотите выполнить 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, не будут известны за его пределами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...