2016-04-17 7 views
0

Ich habe eine DB mit den Mitarbeitern:Eager Laden mit Einschränkung für das eifrige geladene Feld

id 
name 
manager_id 

Fremdschlüsselmanager-ID und zeigt auf id der gleichen Tabelle Mitarbeiter.

Ich möchte die Liste der Mitarbeiter erhalten, aber nur dort, wo der Manager-Name 'MANAGER' heißt.

Ich habe versucht, diese aber es funktioniert nicht:

$employee_list = Employee::with(['manager' => function($query){ 
      $query->where('name', 'MANAGER'); 
     }]); 

Ich denke, es nicht funktioniert, weil es die Funktion einschränken, dass der IDs mit dem Namen ersetzt.

Wie kann ich auf das ganze Ergebnis beschränken, so dass ich nur die Datensätze nehme, wo die manager_id auf den Datensatz mit name = 'MANAGER' zeigt?

Antwort

0

Angenommen, Sie Beziehung die richtige Art und Weise definiert, um Ergebnisse, die Sie erhalten haben get Funktion zu verwenden, damit es sein sollte:

$employee_list = Employee::whereHas(['manager' => function($query){ 
      $query->where('name', 'MANAGER'); 
     }])->get(); 

alle Ergebnisse aus der Datenbank zu erhalten.

+0

Ich weiß, dass ich frage, wie ich alle Ergebnisse bekommen kann, wo manager_id einen anderen Namen als 'MANAGER' hat. Ich könnte eine Join-Klausel verwenden, aber ich frage mich, ob dies nur mit der With-Anweisung möglich ist. Der Befehl, den ich geschrieben habe, wo Sie nur hinzugefügt haben -> get() wird mir alle Datensätze geben und mir den Manager-Namen nur zeigen, wenn der Manager-Name 'MANAGER' ist was ich nicht will, ich möchte die wo zu bewerben haben im Großen und Ganzen, nicht nur auf die Verbindung zu den Managern. – Richard

+0

@Richard Was Sie wollen, verwendet wahrscheinlich 'whereHas' Funktion wie in meiner bearbeiteten Antwort. Wenn es das nicht ist, sorry, ich kann dir nicht helfen, weil es nicht klar ist, was genau du willst. –

Verwandte Themen