Laravel — как обрабатывать необязательное/необязательное поле в $заполняемой вставке и обновлении

#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 или сделать его обнуляемым, но в целях производительности я рекомендовал вам разделить необязательные таблицы в другой таблице и подключить их к основной таблице по отношению, это предотвратит увеличение пустых записей, поэтому вам не придется тратить место на хосте