[英]Integrity constraint violation: 1452 Cannot add or update a child row laravel 6
[英]spatie/laravel-permissions assignRole method causes error [Integrity constraint violation: 1452 Cannot add or update a child row]
我嘗試使用播種器將角色分配給用戶,但我不斷收到此錯誤:
完整性約束沖突:1452不能添加或更新子行,外鍵約束失敗(
internshipweb
。user_has_roles
,約束user_has_roles_role_id_foreign
外鍵(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');
}
}
我試過清除緩存和配置。 我似乎找不到任何遇到相同問題的人。 如果您需要更多信息,請告訴我。
您正在嘗試在user_has_roles
表中添加一行,但該行中的role_id
在您的roles
表中不存在。 您的roles
表已經播種了嗎? 在運行此代碼之前,需要具有管理員角色。 如果是后來的播種者,則可以在RolesTableSeeder
分配該角色
之所以會出現此錯誤,是因為您試圖根據當前存儲在角色中的值將user_has_roles行更新為id字段沒有有效值。
編輯:確保role_id作為user_has_roles模型中的可填充屬性包括在內。
這是一種變通/破解方法,但請注意,這將禁用所有外鍵檢查。 如果其他所有方法都失敗,則可以:
請注意,這是一個臨時解決方法,只會持續當前會話的時間。 當您重新連接到數據庫時,將重新啟用該約束,這是一件好事。
嘗試在您的數據庫上運行此查詢:
SET FOREIGN_KEY_CHECKS=0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.