Поле ошибки не имеет значения по умолчанию в laravel 5.3

#php #database #laravel #oop #laravel-8

#laravel #laravel-5.3

Вопрос:

У меня нет проблем в Laravel 5.2, но в Laravel 5.3 после создания миграции для пользовательской модели она показывает мне следующую ошибку:

SQLSTATE[HY000]: General error: 1364 Field 'family' doesn't have a default value !!!

В модели user:

 protected $fillable = [
    'name', 'email', 'password', 'family', 'mobile', 'address', 'status'
];
  

В процессе миграции:

 Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('family');
        $table->string('mobile')->unique();
        $table->string('address');
        $table->boolean('status');
        $table->string('email')->unique();
        $table->string('password');
        $table->integer('reagent');
        $table->rememberToken();
        $table->timestamps();
    });
  

В чем моя проблема?

Ответ №1:

Вы должны добавить ->nullable() или ->default('somethingHere') к полям, которым вы отправляете пустые значения.

 $table->string('family')->nullable(); //this means that if you send empty value this field will become MySQL NULL
  

Или установите значение по умолчанию:

 $table->string('family')->default('default value here');
  

Чем повторно перенести:

 php artisan migrate:rollback
  

и

 php artisan migrate
  

Комментарии:

1. никаких проблем в Laravel 5.2! Есть ли другой способ?

2. Вы повторно перенесли?

3. что вы имеете в виду remigrated ?

Ответ №2:

Я нашел свои решения вот по ссылке: Eloquent create сообщает, что столбец не имеет значения по умолчанию

Ответ находится внизу, я просто процитировал ответ также

imbhavin95 ответил 8 месяцев назад

Однако причина, по которой это происходит сейчас, заключается в том, что Laravel 5.1 по умолчанию использует строгий режим для MySQL.

Если вы хотите вернуться к предыдущему поведению, обновите config/database.php файл и установите ‘strict’ => false для вашего соединения.

спасибо этому человеку https://laravel.io/user/imbhavin95

Ответ №3:

Вы можете сделать это nullable :

 $table->string('family')->nullable();
  

Или добавьте какое-нибудь значение по умолчанию:

 $table->string('family')->default('none');
  

После этого вы должны создать резервную копию данных и запустить:

 php artisan migrate:refresh                                      
  

Затем восстановите данные.

Или вы могли бы создать отдельную миграцию и просто изменить family на значение, равное нулю:

 Schema::table('users', function (Blueprint $table) {
    $table->string('family')->nullable()->change();
});
  

Комментарии:

1. Привет, я добавляю family в $fillable после password

2. Спасибо за помощь, но в laravel 5.2 не используется ->nullable()

3. @Ali оно не могло работать в 5.2 без ошибки. Когда вы будете использовать любой метод, который использует mass assignment функцию (например, create() или update() ), вы получите ошибку как в 5.2, так и в 5.3.