Laravel:在Collection过滤上传递额外参数

时间:2014-07-06 15:38:14

标签: php laravel eloquent

这个想法非常简单,但我还没有实现它。

这是代码

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

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

非常感谢任何建议或指导!

谢谢!

2 个答案:

答案 0 :(得分:61)

它不是全局的,但use适用于Closure:

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

答案 1 :(得分:2)

这并不是你想要做的事情 - 但它看起来就像你想要达到的目标。

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

但是如果你真的想要进行过滤,那么@ deczo的答案是可行的。