Mysql
 sql >> Database >  >> RDS >> Mysql

Laravel Eloquente Relazione tra 3 tavoli

Nel tuo schema attuale, non sarai in grado di taggare il ruolo dell'artista in base all'album.
Dato che non c'è alcuna relazione nelle tue tabelle per definire che la voce in artist_role la tabella è per l'album specifico. Quindi, quello che suggerirei è di creare una tabella intermedia contenente il role_id ,artist_id e album_id .
Per utilizzare questa tabella intermedia con manyToMany di laravel relazione, puoi definire i metodi nei tuoi modelli specificando un attributo come attributo pivot.

Per, ad es. in Artista Modello :

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

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

Definisci metodi simili anche per altri Modelli.

Aggiornamento:

Per ottenere Artist con il suo ruolo in Album aggiungi il seguente metodo nell'Album modello:

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

Per i ruoli aggiungi il seguente metodo:

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