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) } }
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
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
@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