В соответствии с Документация Symfony 2.4, любое поле формы, которое не требуется, но представлено без какого-либо значения (значение по умолчанию для полей выбора или пустое значение для текстовых полей), будет сохранено в сущности со значением NULL. Поэтому, если ваше поле объекта определено как NOT NULL (например, не nullable = true), когда вы сохраняете объект, вы получите неприятную ошибку:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'shell' cannot be null
Таким образом, в документации говорится, что если вы не хотите использовать значение NULL в качестве значения по умолчанию, вы можете указать атрибут empty_data
в текстовом или поле выбора. Однако это не работает для меня.
Поле Entity (не может быть недействительным):
/**
* @ORM\Column(type="string")
*/
protected $shell = '';
Form Builder (не требуется):
->add('shell', 'choice', array(
'label' => 'Shell',
'choices' => array('shell' => 'Fancy Pants'),
'required' => false,
'empty_data' => ''
))
Я не понимаю этот атрибут empty_data
? Я пропустил некоторые важные настройки в другом месте? Каков рекомендуемый способ сделать это?
UPDATE
Этот билет Github объясняет, что это была проблема еще в 2012 году, и она еще не исправлена.
Это означает, что все, кто использует построитель форм, вынуждены делать любое поле, которое не требуется в поле с нулевым значением? Это кажется довольно упрямым для рамки... есть много причин, по которым мы не хотим использовать NULL, когда значение по умолчанию '' или 0 не имеет уникального значения, и нам не нужен NULL. Для многих запросов необходимо проверить наличие обоих полей = 0 ИЛИ field = NULL, это боль.
Есть ли лучшее решение, которое используют другие люди?