2 回答
TA贡献1830条经验 获得超3个赞
您将永远无法通过在角色集合中调用 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);
}
}
TA贡献1805条经验 获得超10个赞
您可以更新belongsToMany
调用以在数据透视表上包含 setter_id,然后通过访问它->pivot->setter_id
并使用该 id 检索模型。
return $this->belongsToMany(Role::class)->withPivot('setter_id');
或者(也是我个人的追求)您可以定义一个自定义枢轴模型,并setter()
在那里创建一个关系,这样您就可以直接从枢轴检索模型。
- 2 回答
- 0 关注
- 85 浏览
添加回答
举报