2016-11-12 1 views
1

Ich habe eine große Abfrage, die eine verschachtelte Abfrage hat. Ich möchte wissen, wie man es schreibt, damit es nicht überladen ist. Was ich versucht wurde Erstellen von AbfrageobjektenTeilen einer großen geschachtelten Abfrage in Laravel

//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'); 

Ich erhalte diesen Fehler

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

Wie soll ich es tun?

Antwort

1

Sie müssen Ihre Variable von Ihrem übergeordneten Bereich in Ihrer anonymen Funktion erben. Es ist möglich, mit use, etwa so:

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

Lesen Sie mehr über use (Beispiel # 3 Vererben Variablen aus dem übergeordneten Bereich) hier: http://www.php.net/manual/en/functions.anonymous.php

0

Sie sollten es auf diese Weise tun:

$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(); 

Hoffe, das hilft!

Verwandte Themen