Метод assignRole spatie / laravel-permissions вызывает ошибку [Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку] - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь назначить роль пользователю, используя сеялку, но постоянно получаю эту ошибку:

Нарушение ограничения целостности: 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');
    }
}

Я попытался очистить кеш и конфигурацию. Я могуКажется, я не нашел никого с такой же проблемой. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Вы пытаетесь добавить в свою таблицу user_has_roles строку с role_id, которой нет в таблице roles.Ваш roles стол уже посеян?Роль администратора должна существовать до запуска этого кода.Если это более поздняя сеялка, вы можете назначить эту роль в вашем RolesTableSeeder

0 голосов
/ 22 мая 2018

Вы получаете эту ошибку, потому что вы пытаетесь обновить строку до user_has_roles , которая не имеет допустимого значения для поля id на основе значений, в настоящее время хранящихся в role .

EDIT: убедитесь, что role_id включен в качестве заполняемого свойства в вашей модели user_has_roles.

Вот обходной путь / хак, но будьте осторожны сэто отключит все проверки внешнего ключа.Если все остальное терпит неудачу, вы можете:

Обратите внимание, что это временный обходной путь, который продлится только продолжительность вашего текущего сеанса.При повторном подключении к базе данных это ограничение будет повторно включено, и это хорошо.

Попробуйте выполнить этот запрос в вашей базе данных:

SET FOREIGN_KEY_CHECKS=0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...