2012-01-11 73 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