2016-06-20 20 views
0

Ich habe 3 Tabellen nämlich A, B und C. Alle 3 von ihnen müssen eine Notizentabelle verwenden (dh A hat viele Notizen und eine Notiz gehört zu A. Das gleiche gilt für die restlichen 2 Tabellen).
Also habe ich 3 weitere Tabellen erstellt: A_note, B_note und C_note (wie hier erwähnt: multiple tables need one to many relationship).Mehrere Tabellen mit Eins-zu-Viele-Beziehung (Laravel)

Gibt es eine Möglichkeit, CRUD-Operationen für diese Tabellen auszuführen (A_note, B_note und C_note), ähnlich wie wir Pivot-Tabellen in einer n: n-Beziehung handhaben?

Bitte schlagen Sie einen Weg vor.

Antwort

1

Sie sollten polymorphic Beziehungen dafür verwenden. Es ermöglicht mehreren Modellen, eine einzige Tabelle zu verwenden.

Have a look at the documentation here

In Ihrem speziellen Fall würde verweist jede Ihrer Tabellen eine noteable_id Säule und ein noteable_type. Die noteable_id enthält die ID des Modells (A/B/C).

Die noteable_type enthält den String-Namen des Modells (A/B/C).

Die (A/B/C) Modelle wird nun ein neues Attribut erhalten:

/** 
* (A/B/C) Model(s) 
*/ 
public function notes() 
{ 
    return $this->morphMany('App\Notes', 'noteable'); 
} 

Und das note Modell initiiert es polymorphe Eigenschaften gegenüber dem Attributnamen benutzt, um Ihre polymorphic ids and types zu identifizieren:

/** 
* Note Model 
*/ 
public function noteable() 
{ 
    return $this->morphTo(); 
} 

Jetzt können Sie Rufen Sie einfach ->noteable über die (A/B/C) Modelle an, und alle teilen sich eine Tabelle ohne die Notwendigkeit einer anderen Pivot-Tabelle für jede Tabelle.