Я заметил, что в Laravel (при использовании $model->fill(Input::all())
не имеет значения, как поступают данные) пустые поля (пустые в форме) отображаются как пустая строка (''
). Это имеет смысл, поскольку именно так он доставляется из браузера на HTTP-сервер в PHP.
Проблема в том, что если столбец является числовым и имеет значение DEFAULT
или NULL
able, сгенерированный запрос от Eloquent имеет ''
для значения столбца, поэтому MySQL интерпретирует это и вводит значение как 0
, а не значение столбца по умолчанию или NULL
. Это что-то, что я делаю неправильно, или мне нужно будет приложить дополнительные усилия (например, мутатор), чтобы обнаружить эту пустую строку и преобразовать ее в null
для достижения того, чего я действительно хочу?
Конечно, я понимаю, что с технической точки зрения Laravel, не зная, как работают ваши столбцы, не может просто предположить, что пустая строка означает передачу NULL
в запрос INSERT
, потому что иногда вы действительно хотите установить поле (в частности, символ -основанный) на пустую строку, а не на NULL
.
Тем не менее, я бы предпочел не определять мутаторы для всех моих моделей только потому, что я использую $model->fill()
, но есть ли что-то, о чем я не знаю, что я могу сделать?
Для людей, читающих это MySQL, правильно ли установить числовое поле в 0
, если передано ''
? Похоже, что его следует рассматривать как NULL
, так как это явно не 0
, но я предполагаю, что это может быть слабая типизация, приравнивающая ''
к 0
, а не к более отдаленному NULL
.
''
или фактически предоставлять''
в MySQL. 19.03.2014