php - 3 表之间的 Laravel Eloquent 关系

标签 php mysql laravel

我需要一些帮助来制作音乐库数据库。
我有 3 个表专辑艺术家角色
我希望艺术家在每张专辑中扮演一个角色。 喜欢:
艺术家 1 担任专辑 1 的 Composer ,同时担任专辑 2 的编曲人或专辑 3 的作曲人和编曲人

这个我试过了 database design

数据库应该是什么样子的?什么类型的关系?

最佳答案

在您当前的架构中,您将无法根据专辑标记艺术家的角色。
由于您的表中没有关系来定义 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');
}

关于php - 3 表之间的 Laravel Eloquent 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39269379/

相关文章:

php - 用表情符号或过滤词替换文本的单个 PHP 函数

php xmlReader 与 xmlparser

php - 在PHP中,二维数组中的行数和列数?

c# - 将 Entity Framework 4.4 与 Mysql 结合使用

sql - 运行查询时,MySQL挂起。如何提高效率?

laravel - laravel 中制作 Controller 时出错

java - 面向对象编程父子类

php - CodeIgniter 上没有模型对象的数据库查询

laravel - 如何修复 Laravel request/routes/urls - 它认为 url 是 http,而实际上是 https

php - 使用 Google Oauth 2.0 进行登录和权限管理是个好主意吗?