2017-12-08 5 views
1

Dies ist meine Beziehung Methode in meinem Modell:Laravel Eager Loading Beziehung mit Zusatz -> where()

public function relation() 
{ 
    return $this->belongsTo('App\Table', 'table_2_id', 'table_2_id')->where('table_1_id', $this->table_1_id); 
} 

So werden sowohl das Modell oben und Table2 die gleiche Spalte haben, aber es gibt die Möglichkeit, viele Einträge, also möchte ich dann auf eine zweite Spalte filtern, die von beiden Tabellen, table_1_id geteilt wird.

Es scheint perfekt in der Befehlszeile zu funktionieren, aber wenn eifrig geladen wird, ist die Beziehung leer.

Wenn ich die zusätzliche ->where() aus der Beziehung Methode entfernen, dann funktioniert das Eager-Laden.

So wie ich bin gespannt-Laden ist von

tun
->with('relation.nestedRelation'); 

Ich habe auch versucht

->with(['relation' => function ($q) { 
    $q->with('nestedRelation'); 
}]) 

Ich habe gerade versucht, es als Attribut hinzugefügt, um zu sehen, ob das geholfen, aber immer noch keine Freude.

Antwort

1

Sie verwenden, um die whereColumn() Funktion:

->whereColumn('table_1.table_1_id', 'table_2.table_1_id') 

Oder Sie können das verwenden:

public function filterRelation(){ 
    return $this->relation->where('table_1_id', $this->table_1_id); 

} 
+0

danke, ich wusste nicht, über diese Funktion, erhalte ich eine unbekannte Spalte Fehler, ich Ich nehme an, das würde eine Verbindung zur Arbeit brauchen? – martincarlin87

+0

Ja, das müßtest du tun, aber wenn du nicht willst, kannst du einfach den Schnitt benutzen, den ich gerade gemacht habe :) Dann fang nur an, dass du zuerst die ganze Beziehung lädst und nicht nur die Zeile, die du willst :( –

Verwandte Themen