Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mehrere Tabellen mit einer Eins-zu-Viele-Beziehung (Laravel)

Sie sollten polymorphic verwenden Beziehungen dazu. Es ermöglicht mehreren Modellen, eine einzelne Tabelle zu verwenden.

Sehen Sie sich hier die Dokumentation an

In Ihrem speziellen Fall würde jede Ihrer Tabellen auf eine noteable_id verweisen -Spalte und einen noteable_type .

Die noteable_id enthält die ID des (A/B/C) Modell.

Der noteable_type enthält den Zeichenfolgennamen des Modells (A/B/C) .

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

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

Und die note Das Modell initiiert seine polymorphen Eigenschaften anhand des Attributnamens, der zum Identifizieren Ihrer polymorphic ids and types verwendet wird :

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

Jetzt können Sie einfach ->noteable aufrufen auf (A/B/C) Modelle, und alle teilen sich eine Tabelle, ohne dass für jede Tabelle eine weitere Pivot-Tabelle benötigt wird.