Laravel 10 Jetstream Seeder报错:model_has_roles表team_id非空约束违规
解决Laravel Seeder分配角色时team_id为空的错误
这个错误是因为你的spatie/laravel-permission启用了多团队功能,导致model_has_roles表的team_id字段被设置为非空约束,分配角色时必须指定用户所属的团队。
修改步骤:
- 保存创建的Team实例,方便后续引用
- 分配角色时关联该团队
修改后的完整Seeder代码:
public function run(): void { $user = \App\Models\User::create([ 'name' => 'Topollo Raliqala', 'email' => 'topollo@babatle.com', 'password' => bcrypt('asDF1@#ASdf'), ]); $role = Role::create(['name' => 'Admin']); $permissions = Permission::pluck('id', 'id')->all(); $role->syncPermissions($permissions); // 保存团队实例到变量 $team = \App\Models\Team::forceCreate([ 'user_id' => $user->id, 'name' => "Babatle (Pty) Ltd", 'personal_team' => false, ]); $user->ownedTeams()->save($team); // 分配角色时指定team_id $user->assignRole($role->id, $team->id); // 或者使用更直观的写法: // $user->forTeam($team)->assignRole($role); }
说明:
- 启用团队功能后,
assignRole方法支持第二个参数传入团队ID,用于填充model_has_roles表的team_id字段 forTeam($team)方法可以先指定当前操作的团队,再调用assignRole,两种方式效果完全一致
内容的提问来源于stack exchange,提问作者raliqala
相关产品推荐
相关产品推荐

