Doctrine / Symfony将空字符串“转换”为NULL

时间:2016-04-01 06:51:48

标签: mysql sql symfony doctrine-orm symfony-2.3

所以有一个表单和非必填字段,比如说“first_name”。当我将此字段留空时,我收到一个错误,“列'first_name'不能为空”,因为它实际上不能。但是为什么Doctrine会将空字符串转换为NULL?

但我不得不对此提出疑问:

  1. 可以禁用它吗?

  2. 您对此有何看法?到现在为止,我已经习惯了当表单字段为空时,我只是插入一个空字符串。不是o_O但是......有人告诉我这是我们应该遵循的原则。然而,对我来说,NULL意味着“没有价值”,而''(空字符串)意味着不同的东西 - “有一个值,但它是空的”。你觉得怎么样?

  3. 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在接受答案之下的回答,因为对我来说这似乎很骇人听闻。

2 个答案:

答案 0 :(得分:2)

好吧,就像有人建议我一样,它就像:

public function setUserName($userName) {
    $this->userName = (string)$userName;
    return $this;
}

在实体中。

编辑:加号,我们需要为变量提供默认值,例如:

$userName = '';

答案 1 :(得分:2)

坦率地说,最好在数据库中为您的名字提供NULL值。做你做的只是让事情变得更复杂。

Symfony由专业人士和我开发,转换似乎是合理的,因为空字符串并不比NULL更有趣。

你在上面说过,NULL和一个空字符串是两个不同的东西,在某种意义上是正确的,但这意味着什么是空名(即空字符串)?是不是说这个人没有已知的名字(即NULL)?

修改

回复您的第一条评论:

那么在这种情况下,对字符串进行类型转换是正确的方法。