所以有一个表单和非必填字段,比如说“first_name”。当我将此字段留空时,我收到一个错误,“列'first_name'不能为空”,因为它实际上不能。但是为什么Doctrine会将空字符串转换为NULL?
但我不得不对此提出疑问:
可以禁用它吗?
您对此有何看法?到现在为止,我已经习惯了当表单字段为空时,我只是插入一个空字符串。不是o_O但是......有人告诉我这是我们应该遵循的原则。然而,对我来说,NULL意味着“没有价值”,而''(空字符串)意味着不同的东西 - “有一个值,但它是空的”。你觉得怎么样?
P.S。如果重要,我会使用MySql。
编辑
有一个类似的问题:
Symfony2 forms interpret blank strings as nulls但是截至2016年可能还有新的解决方案?
唯一有效的解决方案是接受答案的解决方案:
或者当你有函数setRecap时,你可以检查是否为空 或者不设置和设置您期望的值。
public function setRecap($recap) {
if(!isset($recap)) {
$this->recap = ''
} else {
$this->recap = $recap;
}
}
但我有很多这样的领域,这对我来说似乎有些过分,必须有一个更简单的解决方案。
P.S。我没有尝试过Thomas Decaux在接受答案之下的回答,因为对我来说这似乎很骇人听闻。
答案 0 :(得分:2)
好吧,就像有人建议我一样,它就像:
public function setUserName($userName) {
$this->userName = (string)$userName;
return $this;
}
在实体中。
编辑:加号,我们需要为变量提供默认值,例如:
$userName = '';
答案 1 :(得分:2)
坦率地说,最好在数据库中为您的名字提供NULL
值。做你做的只是让事情变得更复杂。
Symfony由专业人士和我开发,转换似乎是合理的,因为空字符串并不比NULL
更有趣。
你在上面说过,NULL
和一个空字符串是两个不同的东西,在某种意义上是正确的,但这意味着什么是空名(即空字符串)?是不是说这个人没有已知的名字(即NULL
)?
修改强>
回复您的第一条评论:
那么在这种情况下,对字符串进行类型转换是正确的方法。