如何同步三个laravel模型

时间:2017-11-11 15:24:03

标签: php laravel eloquent pivot

我有三个模型:用户,角色,组织。 和数据透视表

 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]]);

但它给了我一个queryexceptionorganization_id没有默认值。我在尝试更新用户详细信息时应该如何同步数据透视表,并注意我不想在我想要更新的用户的枢轴上保留任何现有记录。

1 个答案:

答案 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.

的原因