Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Spatial/laravel permissions assignRole方法导致错误[完整性约束冲突:1452无法添加或更新子行]_Php_Laravel_Laravel 5.4 - Fatal编程技术网

Php Spatial/laravel permissions assignRole方法导致错误[完整性约束冲突: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

我试图使用播种机将角色分配给用户,但一直出现以下错误:

完整性约束冲突:1452无法添加或更新子行:外键约束失败(
InternishipWeb
user\u has\u roles
,constraint
user\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