Doctrine2转换错误

Niz*_* B. 33 symfony doctrine-orm

"Doctrine2&Symfony2"中的这个错误是什么意思?

无法将数据库值""转换为Doctrine Type数组

sol*_*arc 73

您可能已将类型字符串中的字段更改为实体中的类型数组,但已将数据存储在数据库中.尝试将空字符串从数据库转换为数组失败了.

如果它是一个开发数据库,​​只需删除它并再次创建它,或者只删除有问题的行.或者您可以将所有空字符串转换为a:0:{}(序列化的空数组).

UPDATE table SET column="a:0:{}" WHERE column = "";
Run Code Online (Sandbox Code Playgroud)

  • 有同样的问题.将字段添加到具有预先存在的数据的实体后发生.Doctrine尝试将NULL转换为数组,而不是智能地看到该字段为NULL,因此它应该只返回一个空数组;)将预先存在的条目设置为序列化的空数组是完美的.+1 (2认同)

Wil*_*hoy 8

我不希望每个人都在他们的生产数据库上运行SQL.

 @ORM\Column(type="array", nullable=TRUE)
Run Code Online (Sandbox Code Playgroud)

使列成为可空的更简单的解决方案,因此在运行"console doctrine:schema:update --force"之后,现有的DB条目将获得NULL值,而不是空字符串.并且doctrine可以处理将数据库值NULL转换为Doctrine Type数组.它应该只是一个NULL数组引用.并且PHP empty()不关心它的零大小数组还是NULL.

在MySQL中,我得到以下sql-dump:

ALTER TABLE my_table ADD my_new_column LONGTEXT DEFAULT NULL COMMENT '(DC2Type:array)'
Run Code Online (Sandbox Code Playgroud)