簡體   English   中英

spatie / laravel-permissions AssignRole方法導致錯誤[違反完整性約束:1452無法添加或更新子行]

[英]spatie/laravel-permissions assignRole method causes error [Integrity constraint violation: 1452 Cannot add or update a child row]

我嘗試使用播種器將角色分配給用戶,但我不斷收到此錯誤:

完整性約束沖突:1452不能添加或更新子行,外鍵約束失敗( internshipwebuser_has_roles ,約束user_has_roles_role_id_foreign外鍵( role_id )參考rolesid )...

無法弄清楚為什么它不起作用:

這是我的用戶模型:

<?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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM