2016-07-29 33 views
0

Kann scheinen nicht zu finden, was ich falsch mehr nach dem Versuch, etwas anderes tue zu bekommen mit polymorphen Beziehungen zu arbeiten .. Ich habe zwei Tabellen Setup:Laravel one to many Beziehung

Zahlungen:

- id 
- name 
- etc.. 

Einlagen:

- id 
- payment_id 
- name 
- etc.. 

Meine Modellbeziehungen:

Zahlung:

public function deposits() 
{ 
    return $this->hasMany(Deposit::class); 
} 

Kaution:

public function payments() 
{ 
    return $this->belongsTo(Payment::class); 
} 

Jetzt habe ich einen Datensatz in jeder Tabelle für Testzwecke. Ich versuche, die Zahlungen an den eifrigen Last, wenn die Ablagerungen Anzeige:

Zum Beispiel:

$deposits = Deposit::with('payments')->get(); 

Dies schließt nicht die Zahlung zurück, die mit ihm verbunden ist, gibt nur null für die Beziehung. In meiner Tabelle ist die Zahlungs-ID 1, genau wie die ID in der Zahlungstabelle. Zu meiner Erinnerung sollte dies funktionieren. Was vermisse ich?

bearbeiten, gibt die getQueryLog dies:

array(3) { [0]=> array(3) { ["query"]=> string(52) "select * from `users` where `users`.`id` = ? limit 1" ["bindings"]=> array(1) { [0]=> int(1) } ["time"]=> float(0) } [1]=> array(3) { ["query"]=> string(24) "select * from `deposits`" ["bindings"]=> array(0) { } ["time"]=> float(0) } [2]=> array(3) { ["query"]=> string(53) "select * from `payments` where `payments`.`id` in (?)" ["bindings"]=> array(1) { [0]=> int(0) } ["time"]=> float(0) } } 

enter image description here

+1

Sie müssen den Fremdschlüssel in Ihrer 'payments()' -Funktion als zweites Argument angeben, da Laravel annimmt, dass der Fremdschlüssel 'table1name_table2name_id' ist. Also in Ihrem Fall wäre es 'return $ this-> objectsTo (Zahlung :: Klasse, 'payment_id');' – Andrew

+0

Ich nehme das zurück, es ist 'return $ this-> hasMany (Einzahlung :: Klasse, 'payment_id') ; '. Siehe [hier] (https://laravel.com/docs/5.1/eloquent-relationships#one-to-many). – Andrew

+0

@Andrew Laravel nehmen die Schlüssel 'ModelName_id' an, der Tabellenname hat in diesem Fall nichts zu tun. ** Eloquent nimmt den "snake case" Namen des besitzenden Modells und suffix es mit _id ** – xdevnull

Antwort

0

änderte meine Beziehung in meinem Deposit Modell und es funktioniert:

public function payment() 
{ 
    return $this->belongsTo(Payment::class, 'payment_id'); 
} 

noch herauszufinden, warum ich es hinzuzufügen haben , da sollte es auch ohne funktionieren.