【问题标题】:Laravel : Passing extra parameter on Collection filteringLaravel:在集合过滤上传递额外的参数
【发布时间】:2014-08-27 03:54:13
【问题描述】:

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

这是代码

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

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

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

谢谢!

【问题讨论】:

  • 或者你也可以return !in_array($game->id,$games_already_added)
  • @djay 确实是 djay ,但是我的问题是无法访问 games_already_added 数组,但是,感谢您的短线!

标签: php laravel eloquent


【解决方案1】:

它不是全局的,而是 use 与闭包一起使用:

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

【讨论】:

  • 再次感谢@deczo!这肯定会派上用场!
  • Grrr 我知道我需要use,但忘记将参数括在括号中
【解决方案2】:

严格来说,这并不是您想要做的事情 - 但看起来这是您想要实现的目标。

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

但如果你真的想进行过滤,@deczo 的答案就是要走的路。

【讨论】:

    猜你喜欢
    • 2015-02-07
    • 2017-12-18
    • 1970-01-01
    • 2016-05-09
    相关资源
    最近更新 更多