我在$ 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}()
答案 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);
}