Laravel Eloquent 3表之间的关系

时间:2016-09-01 10:41:51

标签: php mysql laravel

我需要一些帮助制作音乐库数据库 我有3个表相册艺术家角色
我希望艺术家能够为每张专辑发挥作用。 喜欢:
艺术家1作为专辑1的作曲家,也作为专辑2的编曲者或作为专辑3的作曲家和编曲者工作

我试过这个 database design

数据库应该怎么样?和什么类型的关系?

1 个答案:

答案 0 :(得分:2)

在您当前的架构中,您将无法根据相册标记艺术家的角色。
由于您的表中没有关系来定义artist_role表中的条目是针对特定专辑的。那么,我建议创建一个包含 role_id artist_id album_id
要将此中间表与laravel的manyToMany关系一起使用,您可以在模型中定义将一个属性指定为pivot属性的方法。

对于,例如在艺术家模型

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

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

为其他模型定义类似的方法..

更新

要让Artist在“相册”中扮演角色,请在Album模型中添加以下方法:

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

对于角色,请添加以下方法:

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