读取查询范围内的数组

时间:2014-07-14 08:13:38

标签: php laravel query-builder

我在$ genreArr中有一个数组,我希望它在函数(查询)内部选择的行中可读:

    if($genreArr){
        $movies = DB::table('movie_list')->whereIn('movie_id',function($query){     
            $query->select(DB::raw('movie_id'))
                      ->from('movie_genre')
                      ->whereIn('genre_id',$genreArr)
                      ->distinct();
        })->orderBy(DB::raw('RAND()'))->take(10)->get();
    }

如何在不使用全局变量的情况下执行此操作,我尝试将该变量作为$ query旁边的第二个参数传递,而不是它给了我这样的错误:

Missing argument 2 for MovieController::{closure}()

2 个答案:

答案 0 :(得分:0)

不确定whereIn方法是否会接受此操作。但是,您可以使用替代的可调用选项,而不是使用闭包。即像

这样的东西
$obj = new SomeClass();
$obj->setGenreArray($genreArr);

$movies = DB::table('movie_list')->whereIn('movie_id',array($obj, 'getQuery'))->orderBy(DB::raw('RAND()'))->take(10)->get();

然后你的查询构建器东西将在getQuery方法中,可以访问属性$this->genreArray

答案 1 :(得分:0)

您应该将闭包调整为use您想要的变量。

function ($query) use ($genreArr) {
... ->whereIn('genre_id', $genreArr);
}