0

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[] をサポートしていないということなので、私は何か間違ったことをしていると思います。本当にそうですか?

ご意見ありがとうございます。

4

1 に答える 1

0

これが私がやろうと決めたことです。

私はリレーションシップを破棄し、国の ID のフラットな配列を保存することを選択していたので、データ型に関する基本的なアサーションを行い、postgres に適した ID の配列を文字列形式で書き込むカスタム マッピング タイプを単純に作成することを選択しました。ID がデータベース内の実際の国を参照していることを確認するための衛生管理を行っているため、残念ながら Doctrine によってジョブが完了しなくなりました。明るい面としては、新しいデータベースとシームレスに連携するシンプルなプロセスです。

マッピング タイプは多次元配列に対して再帰的であるため、かなり複雑なデータに適しています。残念ながら、このデータは Doctrine モデルに基づくことができないため、そのフレームワークの利点を利用しています。トレードオフの問題のようです。私のすべての調査において、Doctrine を一部の postgre のデータ型と簡単に統合することは本質的に不可能に思えました。

于 2013-06-25T20:40:15.810 に答える