Laravel 5 Entrust更新用户角色

Chr*_*eng 12 php laravel-5

我使用Laravel 5和Entrust创建了一个基于角色的项目,一切正常,直到我尝试更新用户的角色列表,血腥的"完整性约束违规"提醒我,在调用时

$user->attachRoles($roles);
Run Code Online (Sandbox Code Playgroud)

它不会首先删除用户的角色,所以我检查usertrait的界面,然后想出来

$user->detachRoles($user->roles);
$user->attachRoles($roles);
Run Code Online (Sandbox Code Playgroud)

代码看起来很丑陋,我认为有三个SQL被执行了

  • 找到用户的角色
  • 删除关系
  • 增加新的关系

我真的希望它会像

$user->updateRoles($roles);
Run Code Online (Sandbox Code Playgroud)

这可以比较现有的角色,并做一些优化.

我错过了什么吗?

Mar*_*ala 15

你可以使用功能$user->roles()->sync($roleKeys).它需要一系列角色键,并在执行所有先前的角色后删除.