Doctrine 2 を ORM として使用して、postgres DB で整数配列データ型を使用しようとしています。最初に、Symfony でフォーム フィールドをエンティティ タイプとして作成し、エンティティがこのエラーの原因であると想定しました。
request.CRITICAL: Doctrine\DBAL\DBALException: An exception occurred while executing 'INSERT INTO actions (bundle_key, name, type, num_installs, countries, enabled) VALUES (?, ?, ?, ?, ?, ?)' with params ["05e4a7e5", "sfsdfdsfs", "1", "3", "O:43:\"Doctrine\\Common\\Collections\\ArrayCollection\":1:{s:54:\"\u0000Doctrine\\Common\\Collections\\ArrayCollection\u0000_elements\";a:3:{i:0;O:39:\"... truncated for SO question ...Bundle\\Entity\\Country\u0000latitude\";s:5:\"18.25\";s:50:\"\u0000AirInstaller\\AdminBundle\\Entity\\Country\u0000longitude\";s:8:\"-63.1667\";}}}", "true"]:
SQLSTATE[22P02]: Invalid text representation: 7 ERROR: array value must start with "{" or dimension information (uncaught exception) at /Users/steveadams/Sites/airinstaller/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php line 47 [] []
クレイジーなシリアル化が行われているのを見て、選択フィールドを作成して国を ID として保存してみることにしました。フィールドがエンティティとして解釈されないようにします。これも失敗しました。次に、doctrine での配列サポートが実際には PHP 配列のシリアル化された文字列であることを発見したドキュメントを調べることにしました。私の列の型が実際にDBの配列である場合、これはまったく機能しません。
したがって、私の難問は次のとおりです。これらの国をpostgres整数[]の適切な形式で保存するカスタムマッピングタイプを作成しますか?{2,13,26,43}
それとも、データベース管理者に列を文字列に変更して、Doctrine が使用したいシリアル化された配列を保存するように依頼しますか? それはとても汚れているようです。
いずれにせよ、私はかなりがっかりしています。ここでの結論は、Doctrine がそのままでは integer[] をサポートしていないということなので、私は何か間違ったことをしていると思います。本当にそうですか?
ご意見ありがとうございます。