Laravel Sync列切换

时间:2017-10-26 10:07:16

标签: php laravel laravel-5

我正在为自己的项目工作,并想知道是否有一个很好的解决方案来解决以下问题。

目前我正在创建用户>角色>许可制度。 我们的想法是,当您创建或更新角色时,您可以看到所有权限并使用复选框来添加te权限(非常简单)。 但我想为创建,读取,更新和删除(CRUD)添加更多复选框。

此时的设置如下:

角色表: string name

权限表: string name

PermissionRole表: uint role_id, uint permission_id, boolean create, boolean read, boolean update, boolean delete

要为我使用sync()方法的角色添加权限。

示例:

$role->permissions()->sync([1 => ['create' => 1, 'update' => 1], 2 => ['create' => 1]]);

这很好用。但是,当我更新而不是插入时,例如我取消选中第一个权限创建的复选框时,创建不会被设置为false,因为表单不再发送创建复选框。

有没有办法使用同步方法,默认情况下让它将未添加的字段设置为false?

1 个答案:

答案 0 :(得分:1)

您必须在调用sync之前构建属性数组,例如

$crudPermission1 = [
    'create' => $request->has('permissions.1.create'),
    'read' => $request->has('permissions.1.read'),
    'update' => $request->has('permissions.1.update'),
    'delete' => $request->has('permissions.1.delete')
];

$role->permissions()->sync([1 => $crudPermission1]);

这是一个简单的例子,您需要构建一个循环,以便为每个权限自动执行此操作。

你需要记住:

  • 如果您未指定列update,则它将保持不变。
  • 要取消选中复选框,您需要检查它是否来自$request->has('checkbox-name');
  • 的请求