Laravel Eloquent 用于数据透视表,其中一个表有 2 个外键,另一个表有 1 个外键

我有如下表,其中是表role_id的外键,和是表的外键。rolesuser_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 :用户及其角色以及用户每个角色的setter


谢谢...


鸿蒙传说
浏览 26回答 2
2回答

牛魔王的故事

您将永远无法通过在角色集合中调用 setter 来访问它。这是错误的:$user->roles->setter让我们看一个可行的示例:foreach($user->roles as $role){    dd($role->pivot->setter)}为了做到这一点,您需要更改模型以反映如下内容:用户class User extends Model{    public $timestamps = false;         public function roles()     {         return $this->belongsToMany(Role::class)            ->using(UserRolePivot::class)            ->withPivot([                'role_id',                'user_id',                'setter_id',            ]);     }}角色class Role extends Model{    public $timestamps = false;        public function users()    {        return $this->belongsToMany(User::class)            ->using(UserRolePivot::class)            ->withPivot([                'role_id',                'user_id',                'setter_id',            ]);    }}枢use Illuminate\Database\Eloquent\Relations\Pivot;class UserRolePivot extends Pivot{    protected $fillable = [        'role_id',        'user_id',        'setter_id',    ];    public function role()    {        return $this->belongsTo(Role::class , 'role_id');    }    public function user()    {        return $this->belongsTo(User::class , 'user_id');    }    public function setter()    {        return $this->belongsTo(User::class , 'setter_id);    }}

holdtom

您可以更新belongsToMany调用以在数据透视表上包含 setter_id,然后通过访问它->pivot->setter_id并使用该 id 检索模型。return $this->belongsToMany(Role::class)->withPivot('setter_id');或者(也是我个人的追求)您可以定义一个自定义枢轴模型,并setter()在那里创建一个关系,这样您就可以直接从枢轴检索模型。
打开App,查看更多内容
随时随地看视频慕课网APP