我有三个模型:用户,角色,组织。 和数据透视表
organization_role_user
user_id role_id organization_id
1 2 1
我可以将用户附加到具有以下角色的组织:
$u = User::first();
$r= Role::first();
$u->roles()->first()->attach($r, ['organization_id'=> Organization::first()->id]);
它工作正常,现在问题是当我想更新用户时:我想同步数据透视表。
我试过了
$u->roles()->sync([1=>['role_id'=>$r->id], 2=>['organization_id'=>$o->id]]);
但它给了我一个queryexception
说organization_id
没有默认值。我在尝试更新用户详细信息时应该如何同步数据透视表,并注意我不想在我想要更新的用户的枢轴上保留任何现有记录。
答案 0 :(得分:0)
假设您的user_id为1
如果你打电话给例如:
$u->roles()->sync([1, 2]);
Laravel会将roles_id 1和2附加到user_id 1:
user_id role_id
------------------
1 1
1 2
如果你想传递额外的中间表值,你应该这样做
$u->roles()->sync([1 => ['organization_id' => 2], 2 => ['organization_id' => 2]]);
user_id role_id organization_id
-------------------------------------
1 1 2
1 2 2
您必须在同步功能中提供organization_id,这是Laravel返回organization_id does not have a default value.