Подтвердить что ты не робот

Laravel: передача дополнительного параметра в фильтрацию коллекции

идея довольно проста, однако я еще не смог ее реализовать.

Здесь код

(Я изменил имя переменных, чтобы описать их использование)

    $games = Game::all();
    $games_already_added = $member->games()->lists('id');

    $games = $games->filter(function($game){
        global $games_already_added;
        if(!in_array($game->id,$games_already_added)){
            return true;
        }   
    });

Когда код выполняется, я получаю сообщение об ошибке

in_array() expects parameter 2 to be array, null given

Я проверил, что переменная $games_already_added определена во внешней области и содержит элементы.

Есть ли способ передать переменную $games_already_added в качестве параметра в функции фильтра сбора?

Приветствуются любые предложения или рекомендации!

Спасибо!

4b9b3361

Ответ 1

Это не глобальный, но use, который работает с закрытием:

$games = $games->filter(function($game) use ($games_already_added) {
    if(!in_array($game->id,$games_already_added)){
        return true;
    }   
});

Ответ 2

Это не то, что вы пытаетесь сделать, но это похоже на то, чего вы хотите достичь.

$games_already_added = $member->games()->lists('id');
$games = Game::whereNotIn('id', $games_already_added)->get();

Но если вы действительно хотите сделать фильтрацию, то ответ @deczo - это путь.