繁体   English   中英

使用 UUID 将权限分配给 spatie/laravel-permission 中的角色时的非法偏移类型

[英]Illegal offset type when assigning Permission into Role in spatie/laravel-permission using UUID

我已经实现了 laravel-permission来使用 UUID 主键自定义我的 Model。 然后我创建了一个播种机:

$viewemployee = Permission::create(['id' => Str::uuid(), 'name' => 'view employee']);
$A = Role::create(['id' => Str::uuid(), 'name' => 'A']);

但是,当我尝试使用以下方式为角色分配权限时:

$A->givePermissionTo($viewemployee);

当我运行种子时它显示这样的错误

ErrorException 在供应商/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Concerns/InteractsWithPivot>Table.php:139 的非法偏移类型

然后,我尝试了另一种分配方法:

$viewemployee->assignRole($A);

但是,它显示了另一个错误:

Illuminate\Database\QueryException SQLSTATE[23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败( db ,CONSTRAINT role_has_permissions role_has_permissions_role_id_foreign KEY ( role_id ) REFERENCES roles ( id ) ON DELETE CASCADE)( SQL:插入role_has_permissions ( permission_id , role_id ) 值 (8f98272b-cbc3-459b-ab23-fc8fa86dd199, 0))

我已正确遵循有关 UUID 和扩展的文档,但我仍然无法弄清楚我错过了什么,因此我无法运行我的种子。

rolepermission数据已成功插入,尝试插入role_has_permissions pivot 表时似乎有问题。

这是我对permissionsrolesrole_has_permissions表的迁移:

Schema::create($tableNames['permissions'], function (Blueprint $table) {
      $table->uuid('id');
      $table->string('name');
      $table->string('guard_name');
      $table->timestamps();

      $table->primary('id');
});

Schema::create($tableNames['roles'], function (Blueprint $table) {
     $table->uuid('id');
     $table->string('name');
     $table->string('guard_name');
     $table->timestamps();

     $table->primary('id');
});

Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames) {
    $table->uuid('permission_id');
    $table->uuid('role_id');

    $table->foreign('permission_id')
        ->references('id')
        ->on($tableNames['permissions'])
        ->onDelete('cascade');

    $table->foreign('role_id')
        ->references('id')
        ->on($tableNames['roles'])
        ->onDelete('cascade');

    $table->primary(['permission_id', 'role_id'], 'role_has_permissions_permission_id_role_id_primary');
});

您需要将Str::uuid()转换为字符串(string)Str::uuid()

$viewemployee = Permission::create(['id' => (string)Str::uuid(), 'name' => 'view employee']);

否则 ID 的Permission将是 UUID object 而不是 UUID 字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM