Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Laravel Eloquent Relação entre 3 tabelas


Em seu esquema atual, você não poderá marcar a função do artista com base no álbum.
Como não há relação em suas tabelas para definir que a entrada em artist_role tabela é para álbum específico. Então, o que eu sugiro é criar uma tabela intermediária contendo o role_id ,artist_id e album_id .
Para usar esta tabela intermediária com manyToMany do laravel relacionamento, você pode definir os métodos em seus modelos especificando um atributo como atributo pivô.

Para, por exemplo em 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 semelhantes para outros modelos também.

Atualização:


Para obter Artist com sua função no Álbum, adicione o seguinte método no Album modelo:
public function Artists(){
    return $this->belongsToMany('App\Artist')->withPivot('role_id');
}

Para funções, adicione o seguinte método:
public function Roles(){
    return $this->belongsToMany('App\Roles')->withPivot('artist_id');
}