sql >> Base de Datos >  >> RDS >> Mysql

Laravel Relación elocuente entre 3 tablas

En su esquema actual, no podrá etiquetar el rol del artista en función del álbum.
Como no hay relación en sus tablas para definir que la entrada en artist_role la tabla es para un álbum específico. Entonces, lo que sugeriría es crear una tabla intermedia que contenga el role_id ,artist_id y album_id .
Para usar esta tabla intermedia con manyToMany de laravel relación, puede definir los métodos en sus modelos especificando un atributo como atributo pivote.

Para, p. en Modelo de artista :

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

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

Defina métodos similares para otros modelos también..

Actualizar:

Por obtener Artist con su función en el Álbum agregue el siguiente método en el Album modelo:

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

Para roles agregue el siguiente método:

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