Laravel :在集合过滤上传递额外的参数

2022-08-30 13:16:45

这个想法很简单,但是我还没有能够实现它。

这是代码

(我已经更改了变量的名称来描述它们的用法)

    $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_add变量作为集合的过滤函数上的参数传递?

任何类型的建议或指导都非常感谢!

谢谢!


答案 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的答案就是要走的路。


推荐