【发布时间】:2017-01-09 05:04:01
【问题描述】:
我需要一些帮助来创建音乐库数据库。
我有 3 个表 专辑、艺术家、角色
我希望艺术家在每张专辑中都有一个角色。
喜欢:
艺术家 1 担任专辑 1 的作曲家,但也担任专辑 2 的编曲或专辑 3 的作曲和编曲
数据库应该是什么样子?又是什么类型的关系?
【问题讨论】:
我需要一些帮助来创建音乐库数据库。
我有 3 个表 专辑、艺术家、角色
我希望艺术家在每张专辑中都有一个角色。
喜欢:
艺术家 1 担任专辑 1 的作曲家,但也担任专辑 2 的编曲或专辑 3 的作曲和编曲
数据库应该是什么样子?又是什么类型的关系?
【问题讨论】:
在您当前的架构中,您将无法根据专辑标记艺术家的角色。
由于您的表中没有关系来定义artist_role 表中的条目是针对特定专辑的。所以,我建议创建一个包含 role_id、artist_id 和 album_id 的中间表。
要将此中间表与 laravel 的 manyToMany 关系一起使用,您可以在模型中定义方法,将一个属性指定为枢轴属性。
例如艺人模特:
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');
}
【讨论】:
Role::find($role_id)->get()->value('name'),或者你可以使用join在同一个查询中获取角色名