【问题标题】:Laravel Eloquent Relation between 3 tableLaravel Eloquent Relation between 3 table
【发布时间】:2017-01-09 05:04:01
【问题描述】:

我需要一些帮助来创建音乐库数据库。
我有 3 个表 专辑艺术家角色
我希望艺术家在每张专辑中都有一个角色。 喜欢:
艺术家 1 担任专辑 1 的作曲家,但也担任专辑 2 的编曲或专辑 3 的作曲和编曲

我试过这个

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

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

    在您当前的架构中,您将无法根据专辑标记艺术家的角色。
    由于您的表中没有关系来定义artist_role 表中的条目是针对特定专辑的。所以,我建议创建一个包含 role_idartist_idalbum_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在同一个查询中获取角色名
    • 抱歉,我的意思是获取当前专辑的艺人角色
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2019-05-22
    • 1970-01-01
    • 2023-01-11
    • 2021-05-06
    • 2013-01-22
    相关资源
    最近更新 更多