#laravel #model #fillable
Вопрос:
У меня есть таблица с полями ниже.
Требуется только имя, а остальные из них необязательны
'name','no_of_color','offset_printing_rate','screen_printing_rate','positive_rate','regular_plate_rate','big_plate_rate',
Моя модель
protected $fillable = [
'name',
'no_of_color',
'offset_printing_rate',
'screen_printing_rate',
'positive_rate',
'regular_plate_rate',
'big_plate_rate',
];
но когда я не заполняю необязательное поле, оно возвращает ошибку
SQL: вставить в имя таблицы (
name
,no_of_color
,offset_printing_rate
,screen_printing_rate
,positive_rate
,regular_plate_rate
,big_plate_rate
,updated_at
,created_at
) значения (имя, ?, ?, ?, ?, ?, ?, 2021-10-09 14:47:36, 2021-10-09 14:47:36)
Комментарии:
1. Поэтому вам нужно самостоятельно проверить, пусты эти поля или нет, и соответствующим образом скорректировать свой запрос
2. Вы уверены, что добавили
->nullable()
дополнительные поля в миграцию?3. работает ли в этой ситуации правило проверки, допускающее аннулирование, в данной ситуации ? @brombeer
4.@Никола, да, я это сделал
$table->string('no_of_color',255)->nullable();
$table->float('offset_printing_rate',8,2)->default(0);
. no_of_color-это строка, а другие необязательные файлы являются числовыми.5. Хорошо, как сказал @brombeer, вам нужно скорректировать запрос. Вы можете добавить код там, где вы его используете.
Ответ №1:
MySQL всегда хочет значение для всех cols, поэтому в laravel вы должны установить значение по умолчанию для каждого col или сделать его обнуляемым, но в целях производительности я рекомендовал вам разделить необязательные таблицы в другой таблице и подключить их к основной таблице по отношению, это предотвратит увеличение пустых записей, поэтому вам не придется тратить место на хосте