Laravel Seeder - как заполнить нулевые значения в уникальном столбце - PullRequest
0 голосов
/ 18 октября 2018

У меня есть простая модель пользователя:

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('email')->unique();
    $table->string('password');
    ...
}

Я хочу сделать сеялку, которая не будет заполнять адреса электронной почты, которые могут быть позже заполнены пользователем:

for($i = 0; $i < 11; $i++){
    $user = new User();
    $user->save();
}

Однако у меня есть очевидная ошибка:

SQLSTATE [HY000]: Общая ошибка: 1364 Поле 'email' не имеет значения по умолчанию

Iпопытался использовать мутатор User Model для моей сеялки:

User Model

public function setEmailAttribute($value) {
    if ( empty($value) ) { // will check for empty string
        $this->attributes['email'] = NULL;
    } else {
        $this->attributes['email'] = $value;
    }
}

User Seeder

for($i = 0; $i < 11; $i++){
    $user = new User();
    $user->setEmailAttribute('');
    $user->app_role = "user";
    $user->save();
}

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

SQLSTATE [23000]: нарушение ограничения целостности: 1048 Столбец 'email' не может быть пустым

Однако я не хочу постоянно устанавливать для столбца email значения unique и nullable, поскольку я хочу проверить это только для моей сеялки.

Кто-нибудь знает, как найти решение здесь?

1 Ответ

0 голосов
/ 18 октября 2018

добавьте nullable() в ваш email столбец в вашей миграции

    $table->string('email')->unique()->nullable()

, затем запустите в командной строке следующую команду:

1. composer dump-autoload // обновит измененияв вашей миграции

2. php artisan migrate:fresh --seed // новая миграция и семена ваших сеялок

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