Php Spatial/laravel permissions assignRole方法导致错误[完整性约束冲突:1452无法添加或更新子行]
我试图使用播种机将角色分配给用户,但一直出现以下错误: 完整性约束冲突:1452无法添加或更新子行:外键约束失败(Php Spatial/laravel permissions assignRole方法导致错误[完整性约束冲突:1452无法添加或更新子行],php,laravel,laravel-5.4,Php,Laravel,Laravel 5.4,我试图使用播种机将角色分配给用户,但一直出现以下错误: 完整性约束冲突:1452无法添加或更新子行:外键约束失败(InternishipWebuser\u has\u roles,constraintuser\u has\u roles\u role\u id\u foreign外键(role\u id)引用角色(id) 无法理解它为什么不起作用: 这是我的用户模型: <?php namespace App\Models\Website; use Illuminate\Notifica
InternishipWeb
user\u has\u roles
,constraintuser\u has\u roles\u role\u id\u foreign
外键(role\u id
)引用角色
(id
)
无法理解它为什么不起作用:
这是我的用户模型:
<?php
namespace App\Models\Website;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use Notifiable, HasRoles;
protected $connection = 'mysql2';
protected $guard = 'webuser';
protected $fillable = [
'email', 'password', 'username', 'permissions', 'first_name', 'last_name', 'avatar'
];
protected $hidden = [
'password'
];
}
出现此错误是因为您试图将一行更新为用户角色,而该用户角色的id字段没有有效值
基于当前存储在角色中的值
编辑:确保角色id作为可填充属性包含在用户角色模型中。
这里有一个变通/破解方法,但请注意,这将禁用所有外键检查。如果所有其他方法都失败,您可以:
注意,这是一个临时解决方案,只能持续当前会话的长度。当您重新连接到数据库时,将重新启用此约束,这是一件好事
尝试在数据库上运行此查询:
SET FOREIGN_KEY_CHECKS=0
您正在尝试向您的用户\u has\u roles
表中添加一行,该行具有角色\u id
,但在您的角色
表中不存在该id。您的角色
表是否已播种?在运行此代码之前,您需要存在管理员角色。如果它是较新的播种机,您可以在角色播种机中分配该角色ode>外键很重要,他应该解决这个问题,而不是禁用MySQL的功能。@Jeff同意了。但是最近我和Laravel遇到了这个问题,在一天的努力之后,我转向了这个似乎没有引起任何问题的修复程序。我总是在迁移和种子设定之前禁用外键检查,然后重新启动重新启用它们,这样我就不认为这是修复方法了?@chinlayal你看到我的编辑了吗?关于可填充数组??好的,我会尝试一下,我仍然得到相同的错误,我在调用数据库种子机
之前调用了数据库种子机
中的角色表populated@chinloyal我没有tice users表指定了数据库,但是roles没有,它们是在同一个数据库中吗?@Jeff你说得对,“Role”模型指向了我的下一个数据库,我要设置连接,看看是否有效
SET FOREIGN_KEY_CHECKS=0