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

Laravel Eloquent Relation between 3 table

In Ihrem aktuellen Schema können Sie die Rolle des Künstlers nicht anhand des Albums markieren.
Da es in Ihren Tabellen keine Beziehung gibt, um den Eintrag in artist_role zu definieren Tabelle ist für ein bestimmtes Album. Ich würde also vorschlagen, eine Zwischentabelle zu erstellen, die die role_id enthält ,artist_id und album_id .
Um diese Zwischentabelle mit Laravels manyToMany zu verwenden Beziehung können Sie die Methoden in Ihren Modellen definieren, indem Sie ein Attribut als Pivot-Attribut angeben.

Für z.B. im Künstlermodell :

public function Roles(){
    return $this->belongsToMany('App\Roles')->withPivot('album_id');
}

public function Albums(){
    return $this->belongsToMany('App\Albums')->withPivot('role_id');
}

Definieren Sie ähnliche Methoden auch für andere Modelle..

Aktualisierung:

Um Artist zu bekommen mit seiner Rolle im Album fügen Sie folgende Methode im Album hinzu Modell:

public function Artists(){
    return $this->belongsToMany('App\Artist')->withPivot('role_id');
}

Fügen Sie für Rollen folgende Methode hinzu:

public function Roles(){
    return $this->belongsToMany('App\Roles')->withPivot('artist_id');
}