根据Symfony 2.4文档,任何非必填的表单字段,但在没有值的情况下提交(对于选择字段为默认值,对于文本字段为空值),将保存为具有NULL值的实体。因此,如果您的实体字段定义为NOT NULL(例如,不可为空= true),则持久化实体时会出现错误:
所以文档说如果您不想使用NULL作为默认值,您可以在文本或选择字段上指定“empty_data”属性。然而,这对我来说不起作用。
实体字段(非空):
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'shell' cannot be null
所以文档说如果您不想使用NULL作为默认值,您可以在文本或选择字段上指定“empty_data”属性。然而,这对我来说不起作用。
实体字段(非空):
/**
* @ORM\Column(type="string")
*/
protected $shell = '';
表单生成器(非必需):
->add('shell', 'choice', array(
'label' => 'Shell',
'choices' => array('shell' => 'Fancy Pants'),
'required' => false,
'empty_data' => ''
))
我是否误解了empty_data
属性?我是否错过了其他重要的设置?有没有推荐的做法?
更新
这个Github ticket解释说,这是2012年的一个问题,但现在还没有修复。
这意味着每个使用表单构建器的人都必须将任何不需要的字段变成可空字段吗?这对于框架来说似乎相当主观...有很多原因我们不想使用NULL,当默认值''或0没有独特含义且我们不需要NULL时。对于许多查询,必须检查field=0 OR field=NULL的存在是一种痛苦。
有其他人正在使用的更好的解决方案吗?
'empty_data' => ' '
。看起来有点hacky... - greg