首页 > 解决方案 > spatie/laravel-permissions assignRole 方法导致错误 [完整性约束违规:1452 无法添加或更新子行]

问题描述

我正在尝试使用播种机为用户分配角色,但我不断收到此错误:

完整性约束违规:1452 无法添加或更新子行:外键约束失败(internshipweb. user_has_roles, CONSTRAINT user_has_roles_role_id_foreignFOREIGN KEY ( role_id) REFERENCES roles( 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'
    ];


}

这是我的播种机:

<?php

use Illuminate\Database\Seeder;
use App\Models\Website\User;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

class WebUserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Role::create([
            'name' => 'admin'
        ]);

        $user = User::create([
            'email' => 'admin@gmail.com',
            'username' => 'admin',
            'password' => bcrypt('password'),
            'first_name' => 'Add',
            'last_name' => 'Min'
        ]);


        $user->assignRole('admin');
    }
}

我试过清除缓存和配置。我似乎找不到任何有同样问题的人。如果您需要更多信息,请告诉我。

标签: phplaravellaravel-5.4

解决方案


您正在尝试在您的表中添加一行,该行在您的user_has_rolesrole_id中不存在roles。你的roles桌子播种了吗?在此代码运行之前,您需要存在管理员角色。如果是后来的播种机,您可以在您的RolesTableSeeder


推荐阅读