2012-01-11 13 views

答えて

69

に「」データベースの値を変換できませんでしたあなたは、おそらくあなたのエンティティで配列を入力するタイプ文字列からフィールドを変更しますが、すでにデータのデータベースを持っています。空の文字列をデータベースから配列に変換しようとして失敗しています。

開発データベースの場合は、それを削除して再度作成するか、問題のある行を削除するだけです。または、すべての空の文字列をa:0:{}(シリアル化された空の配列)に変換できます。

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

は、この同じ問題を持っていました。既存のデータを持つエンティティにフィールドを追加した後に発生しました。 DoctrineはNULLを配列に変換しようとします。フィールドがNULLであることをインテリジェントに見るのではなく、単に空の配列を返さなければなりません;)既存のエントリをシリアル化された空の配列に設定すると、 +1 – Nick

+1

解決策をありがとう@solarc - 既存のプロジェクトからユーザをインポートした後に空いていた 'roles'フィールドのUPDATE句が必要でした:http://blog.webdevilopers.net/fosuserbundle-login-error-could- doctrine-type-array/ – webDEVILopers

+1

または、Nと同じフィールドをNULLに設定することができます。 – Broncha

-3

dbテーブルの列型(例:longtext)は、Doctrineの列型と一致できません。 列タイプを変更します。

8

プロダクションデータベースで誰もがSQLを実行しない方がいいです。

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

簡単に溶液中では、列のNULL可能を作るので、あなたの実行した後に、「コンソール教義:スキーマを:--force更新」既存のDBエントリは、代わりに空の文字列で、NULL値を取得します。そして、doctrineは、データベース値NULLをDoctrine Type配列に変換する処理を行うことができます。それはちょうどNULL配列リファレンスでなければなりません。 PHPのempty()は、サイズが0の配列かNULLかどうかは気にしません。 MySQLでは

、私は、次のSQLダンプを取得:

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

私は同じSQLダンプを持っていますが、これは私にとってはうまくいかない同じエラー。 – apfz

+0

すてきなヒント!悲しいことに、私は上記の解決策を試してみましたが、NULLの代わりに空の文字列を持つフィールドがたくさんありました。 この問題を解決するには、次のステートメントを実行してください: app/console doctrine:query:sql "UPDATE << your_table_name >> SET <> = NULL WHERE < = – qualbeen