Mysql
 sql >> Base de données >  >> RDS >> Mysql

Laravel Relation éloquente entre 3 tables

Dans votre schéma actuel, vous ne pourrez pas taguer le rôle de l'artiste en fonction de l'album.
Comme il n'y a pas de relation dans vos tables pour définir que l'entrée dans artist_role le tableau est pour un album spécifique. Donc, ce que je suggérerais est de créer une table intermédiaire contenant le role_id ,artist_id et album_id .
Pour utiliser cette table intermédiaire avec le manyToMany de laravel relation, vous pouvez définir les méthodes dans vos modèles en spécifiant un attribut comme attribut pivot.

Pour, par ex. dans Modèle d'artiste :

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

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

Définissez également des méthodes similaires pour d'autres modèles.

Mise à jour :

Pour obtenir Artist avec son rôle dans Album ajouter la méthode suivante dans l'Album modèle :

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

Pour les rôles, ajoutez la méthode suivante :

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