2017-02-09 5 views
0

In Laravel habe ich ein Modell, das wie folgt aussieht:Laravel Eloquent Eager Laden Verwirrung

class Recipient extends Model 
{ 
    public $table = 'recipients'; 

    public function location() 
    { 
     return $this->belongsTo('App\Location'); 
    } 

    public function teams() 
    { 
     return $this->belongsToMany('App\Team'); 
    } 


    public function company() 
    { 
     return $this->belongsTo('App\Company'); 
    } 

} 

dieses Modell abzufragen ich dies tun:

$recipients = Recipient::with('location') 
          ->with('teams') 
          ->where('company_id',Auth::user()->company_id) 
          ->where('teams.id', 10) 
          ->get(); 

Auf diese Weise erhalte ich eine Fehlermeldung, dass laravel teams.id nicht finden kann, da nur die übergeordnete Empfängertabelle abgefragt wird. Ich frage mich, was ich falsch mache, dachte ich, die with Methode war zu eifrig laden/innere Join-Datensätze? Muss ich einen DB verwenden: Inner Join statt? Oder fehlt mir etwas?

Antwort

1

die whereHas Methode für diese Anwendung:

Recipient::with('location') 
    ->where('company_id', auth()->user()->company_id) 
    ->whereHas('teams', function($q){ 
     return $q->where('id', 10); 
    }) 
    ->get(); 
0

versuchen, eine SELECT-Anweisung ist explizit und hinzufügen. Manchmal wird eine Beziehung nicht angezeigt, wenn sie nicht ausgewählt ist. Fügen Sie die IDs hinzu, sonst funktioniert es nicht

Verwandte Themen