首页 > 解决方案 > Laravel Eloquent 用于数据透视表,一个表有 2 个外键,另一个表有 1 个外键

问题描述

我有如下表,其中role_id是表的外键,并且是roles表的外键。user_idsetter_idusers

table 1:
+---------------------+
| users               |
+---------------------+
| id                  |
| name                |
| email               |
| password            |
+---------------------+

table 2:
+---------------------+
| roles               |
+---------------------+
| id                  |
| name                |
+---------------------+

pivot table:
+---------------------+
| role_user           |
+---------------------+
| role_id             |
| user_id             |
| setter_id           |
+---------------------+

我定义的模型:

用户模型:

class User extends Model
{
    public $timestamps = false;
    
     public function roles()
     {
         return $this->belongsToMany(Role::class);
     }
}

好榜样:

class Role extends Model
{
    public $timestamps = false;
    
    public function users()
    {
        return $this->belongsToMany(User::class);
    }
}

如何更改模型以便获得如下所示的数据?

user -> roles -> setter :用户及其角色以及用户的每个角色的设置器

谢谢...

标签: phplaraveleloquentpivot-tablelaravel-7

解决方案


您可以更新belongsToMany调用以将 setter_id 也包含在枢轴上,然后通过访问它->pivot->setter_id并使用该 id 检索模型。

return $this->belongsToMany(Role::class)->withPivot('setter_id');

或者(以及我个人想要的)您可以定义一个自定义数据透视模型,并在那里创建一个setter()关系,这样您就可以直接从数据透视中检索模型。


推荐阅读