在Laravel中拆分大型嵌套查询

时间:2016-11-12 15:52:48

标签: php laravel symfony eloquent

我有一个包含嵌套查询的大查询。我想知道如何编写它以使它不会混乱。我尝试的是创建查询对象

//get the latest joined employee per department
$q1   = Employee::where('job', 'assistant')
                   ->groupBy('dept_id')
                   ->select(DB::raw('MAX(empid) as empid'));
//fetch his course ID
$q2    = Employee::whereIn('empid', function($query){
                                           $query->$q1;
                                       })
                   ->where('university', 'LIKE', '%UCLA%')
                   ->select('course_id')
                   ->distinct()
                   ->get()->lists('course_id'); 

我收到此错误

[Symfony\Component\Debug\Exception\FatalThrowableError]  
  Cannot access empty property

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您需要在匿名函数中从父作用域继承您的变量。可以使用use,例如:

function($query) use ($q1) {
    // use $q1 here
}

在此处阅读use(示例#3从父作用域继承变量):http://www.php.net/manual/en/functions.anonymous.php

答案 1 :(得分:0)

你应该这样做:

$q1   = Employee::where('job', 'assistant')
               ->groupBy('dept_id')
               ->select(DB::raw('MAX(empid) as empid'));

$q2    = Employee::whereIn('empid', function($query) use($q1) {
                                       $query->where('id', $q1); // <---- Do it like this
                                   })
               ->where('university', 'LIKE', '%UCLA%')
               ->select('course_id')
               ->distinct();

希望这有帮助!