Doctrine布尔类型不能设置为false

时间:2018-04-25 16:48:24

标签: doctrine boolean mariadb nullable

我无法将false值设置为类型为boolean的实体列。

/**
 * @ORM\Column(type="boolean")
 */
private $isActive;

发送JSON:

{myEntity: {isActive: false}}

...将导致:

  

完整性约束违规:1048列'is_active'不能为空

发送时:

{myEntity: {isActive: 0}}

......会正常工作

stackoverflow上有一些类似的答案,但解决方案都没有。

RAW COLUMN

+--------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra           |
+-------------+--------------+------+-----+---------+-----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment  |
| is_active   | tinyint(1)   | NO   |     | NULL    |                 |
+-------------+--------------+------+-----+---------+-----------------+

修改

请阅读下面的答案。这不是一个Doctrine bug,而是MariaDB 10.2系列。

2 个答案:

答案 0 :(得分:0)

遗憾的是,这不是主要问题的解决方案,但它会提供一些见解。

将MariaDB 10.2系列(未测试10.0系列)发生false转换为null的问题。

MySQL或MariaDB 5.5系列上没有出现上述问题,它会以正确的方式将false转换为false

专门针对MariaDB 10.2错误提出另一个问题。

答案 1 :(得分:-1)

或者,您应该评估:

/**
 * @ORM\Column(type="boolean", nullable=true)
 */
private $isActive;

您并不总是有机会和/或想要在课堂上初始化一个值。

更新:

我意识到我的回答不是正确的。也许你可以在构造函数中初始化属性,或者自动调用setter。无论如何,你必须“欺骗”你的实体已经改变的Doctrine的工作单元。