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