【问题标题】:Laravel updating all records in many to many relationshipLaravel 更新多对多关系中的所有记录
【发布时间】:2018-02-06 17:24:53
【问题描述】:

表users 和roles 通过role_user 作为数据透视表存在多对多关系。 下面的代码语句通过 id 找到一个用户并成功更新第一个角色。

   User::findOrFail(1)->roles[0]->update(['name'=>'Admin']);

使用下面的代码,我打算更新与提供的 user_id 关联的所有用户角色

User::findOrFail(1)->roles()->update(['name'=>'Admin']);

但我收到以下错误

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'updated_at' in field list is ambiguous (SQL: update `roles` inner join `role_user` on `roles`.`id` = `role_user`.`role_id` set `name` = Admin, `updated_at` = 2018-02-06 09:06:30 where `role_user`.`user_id` = 1)

我知道User::findOrFail(1)->roles 是一个集合。

但是User::findOrFail(1)->roles() 的返回值是BelongsToMany 类型的

这是一个对象吗?为什么我们不能在上面使用update() 方法?

【问题讨论】:

  • 所以您希望单个用户在多行中具有相同的角色??
  • @Sohel0415 我的错,我为什么要那个,现在明白了,谢谢 :)

标签: php laravel


【解决方案1】:

由于是多对多的关系,如果你想为指定用户设置一个角色,你需要使用sync()方法:

$user = User::find(1);
$roleId = Role::where('name', 'Admin')->value('id');
$user->roles()->sync([$roleId]);

【讨论】:

    猜你喜欢
    • 2014-06-18
    • 2015-10-22
    • 2021-08-21
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    相关资源
    最近更新 更多