【发布时间】:2020-11-14 22:47:17
【问题描述】:
我已经实现laravel-permission 来使用 UUID 主键自定义我的模型。然后我创建了一个播种机:
$viewemployee = Permission::create(['id' => Str::uuid(), 'name' => 'view employee']);
$A = Role::create(['id' => Str::uuid(), 'name' => 'A']);
但是,当我尝试使用以下方式为角色分配权限时:
$A->givePermissionTo($viewemployee);
运行种子时出现这样的错误
错误异常 非法偏移类型 在供应商/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Concerns/InteractsWithPivot>Table.php:139
然后,我尝试了另一种分配方法:
$viewemployee->assignRole($A);
但是,它显示另一个错误:
照亮\数据库\查询异常 SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(
db.role_has_permissions,CONSTRAINTrole_has_permissions_role_id_foreignFOREIGN KEY (role_id) REFERENCESroles(@987654330 @) ON DELETE CASCADE) (SQL: 插入role_has_permissions(permission_id,role_id) 值(8f98272b-cbc3-459b-ab23-fc8fa86dd199, 0))
我已正确遵循有关 UUID 和扩展的文档,但我仍然无法弄清楚我错过了什么,因此我无法运行我的种子。
role 和permission 数据插入成功,尝试插入role_has_permissions 数据透视表时似乎遇到了问题。
这是我对permissions、roles 和role_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');
});
【问题讨论】:
-
是否有相应的 spatie 迁移?你能分享一下你用于 role_has_permissions 表的迁移吗?
-
@KurtFriars 是的,所有迁移都成功运行,并且他们将
uuid作为主键而不是大增量,我在我的问题中添加了我的permissions、roles和role_has_permissions迁移
标签: php mysql laravel laravel-permission