2012-01-11 69 views

回答

69

你可能从字符串类型变更字段在实体类型的数组,但已经有数据的数据库。它试图将空字符串从数据库转换为数组失败。

如果是开发数据库,​​只需将其删除并重新创建即可,或者只删除违规行。或者你可以将所有空字符串转换为a:0:{}(一个序列化的空数组)。

UPDATE table SET column="a:0:{}" WHERE column = ""; 
+2

有同样的问题。在向已存在数据的实体添加字段后发生。 Doctrine试图将NULL转换为数组,而不是智能地看到该字段为NULL,因此它应该简单地返回一个空数组;将预先存在的条目设置为序列化的空数组是完美的。 +1 – Nick 2012-01-20 18:09:21

+1

谢谢你的解决方案@solarc - 我需要UPDATE子句用于我的'roles'字段,该字段在从现有项目导入用户后为空:http://blog.webdevilopers.net/fosuserbundle-login-error-could-不转换数据库值到教条类型数组/ – webDEVILopers 2014-07-29 08:46:12

+1

或者你可以设置字段为空'N;' – Broncha 2014-10-16 12:02:27

-3

您的db表列类型(例如:longtext)不能匹配Doctrine的列类型。 更改列类型。

8

我不希望每个人都在生产数据库上运行SQL。

@ORM\Column(type="array", nullable=TRUE) 

在做一个简单的解决方案列空的,所以你运行你的“控制台学说:架构:更新--force”后,对现有数据库的条目会得到,而不是一个空字符串NULL值。而主义可以处理将数据库值NULL转换为Doctrine Type数组。它应该只是一个NULL数组引用。而PHP empty()不关心它的零大小的数组或NULL。

在MySQL中,我得到了如下的sql转储:

ALTER TABLE my_table ADD my_new_column LONGTEXT DEFAULT NULL COMMENT '(DC2Type:array)' 
+0

虽然我有相同的SQL转储,这不适合我,因为我得到同样的错误。 – apfz 2015-02-25 06:25:02

+0

好的提示!可悲的是,我已经尝试了上面的解决方案,并且用很多空字符串而不是NULL来填充字段。 我通过运行以下语句解决了该问题: app/console doctrine:query:sql“UPDATE << your_table_name >> SET <> = NULL WHERE <> =''” – qualbeen 2015-07-17 12:13:52