我的数据透视表包含3列:
- user_id
- role_id
- group
其中,组只是一个整数。我希望能够同步用户和他们的角色,但只限于属于特定组的用户。
如果运行简单的sync([1,2,3]),它将从数据透视表中删除所有内容,完全忽略组信息。
我有几个解决方案:
选项a:
- 为UserRoles创建一个新模型。
UserRoles::where('group', '=', '1');
User::roles()->detach(list_of_ids_from_previous_query);
User::roles()->attach(list_of_desired_ids_for_group_1);
选项b:
User::roles()->all();
- 使用高级合并方法将
$list_of_desired_ids_for_group_1
与$list_of_ids_from_previous_query
合并 User::roles()->sync(list_of_merged_ids);
是否有其他使用Eloquent的方法可以实现这一点?我认为选项(a)更容易实现,因为我不必合并两个多维数组的ID和组信息。但是,选项(a)可能更加耗费数据库资源,因为它需要在所有组行上运行DELETE和INSERT。