php - spatie/laravel-permissions assignRole 方法导致错误 [完整性约束违规:1452 无法添加或更新子行]
问题描述
我正在尝试使用播种机为用户分配角色,但我不断收到此错误:
完整性约束违规:1452 无法添加或更新子行:外键约束失败(
internshipweb
.user_has_roles
, CONSTRAINTuser_has_roles_role_id_foreign
FOREIGN KEY (role_id
) REFERENCESroles
(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');
}
}
我试过清除缓存和配置。我似乎找不到任何有同样问题的人。如果您需要更多信息,请告诉我。
解决方案
您正在尝试在您的表中添加一行,该行在您的user_has_roles
表role_id
中不存在roles
。你的roles
桌子播种了吗?在此代码运行之前,您需要存在管理员角色。如果是后来的播种机,您可以在您的RolesTableSeeder
推荐阅读
- r - 通过查看两列中的成员重叠来确定团队编号
- postgresql - 系统表修改是否通过复制?
- java - Visual Studio Code 中的 Liberty 服务器
- php - 无法显示 SELECT 结果 sql
- spring-boot - 远程连接到在 Kubernetes 中运行的 Elasticsearch
- php - 用 $j 为 php 7.2 重写字符串
- razor - asp.net core 2.1 在验证摘要中显示 HTML
- go - 如何在 golang 中获取 func 文档?
- php - 带有某些字符串的 var_dump 上的 PHP 转储不同的字符串
- php - foreach 循环动态更新中的 PHP 数学