我尝试使用播种机为用户分配角色,但我不断收到此错误:
完整性约束违规:1452无法添加或更新子行:外键约束失败(
internshipweb
。user_has_roles
,CONSTRAINTuser_has_roles_role_id_foreign
FOREIGN KEY(role_id
)参考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');
}
}
我已经尝试清除缓存和配置。我似乎找不到任何有同样问题的人。如果您需要更多信息,请告诉我。
答案 0 :(得分:0)
您正试图在user_has_roles
表格中添加一行,其中role_id
表格中不存在roles
。您的roles
表是否播种了吗?在此代码运行之前,您需要存在admin角色。如果它是以后的播种机,您可以在RolesTableSeeder
答案 1 :(得分:-1)
您收到此错误是因为您尝试将行更新为 user_has_roles ,而该行没有 id 字段的有效值 基于当前存储在角色中的值。
编辑:确保将role_id作为可填写属性包含在user_has_roles模型中。
这是一个解决方法/ hack但要小心这将禁用所有外键检查。如果一切都失败了,你可以:
请注意,这是一种临时解决方法,只能持续当前会话的长度。当您重新连接到数据库时,将重新启用此约束,这是一件好事。
尝试在您的数据库上运行此查询:
SET FOREIGN_KEY_CHECKS=0