#php #laravel #eloquent
#php #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
переменную в качестве параметра в функции фильтра коллекции?
Любые предложения или рекомендации высоко ценятся!
Спасибо!
Комментарии:
1. Или вы можете просто сделать
return !in_array($game->id,$games_already_added)
2. @djay действительно, djay , но моя проблема здесь заключалась в невозможности доступа к массиву games_already_added , однако, спасибо за более короткую строку!
Ответ №1:
Это не глобальное, но use
это работает с закрытием:
$games = $games->filter(function($game) use ($games_already_added) {
if(!in_array($game->id,$games_already_added)){
return true;
}
});
Комментарии:
1. Еще раз спасибо @deczo! Это обязательно пригодится!
2. Grrr Я знал, что мне нужно
use
, но забыл заключить аргументы в круглые скобки
Ответ №2:
Это не совсем то, что вы пытаетесь сделать, но похоже, что это то, чего вы хотите достичь.
$games_already_added = $member->games()->lists('id');
$games = Game::whereNotIn('id', $games_already_added)->get();
Но если вы действительно хотите выполнить фильтрацию, ответ @deczo — это правильный путь.