わかりました、何か大きなものを見逃しているか、バグを踏んでいます。
これは Sf2 (v2.0.9) / Doctrine ODM (1.0.0BETA) プロジェクトです。
基本的に、私は 2 つのドキュメントを持っています。それらを E と P と呼びましょう:
E は多くの P を参照します。
/** * @MongoDB\ReferenceMany(targetDocument="P", simple="true") * @MongoDB\Index */ protected $p = array();
P から対応する E を取得できるかどうかは気にしません。
で E のゲッター/セッターを生成しましたdoctrine:mongodb:generate:documents
。
新しい E() を宣言したら、次のように既存の P をいくつか追加します ($e->addP($p))。
$p1 = $this->dm->getRepository('ProjectBundle:P')->findOneBy(array('id' => $pid1)));
$p2 = $this->dm->getRepository('ProjectBundle:P')->findOneBy(array('id' => $pid2)));
$pArr = array($p1, $p2);
$e = new E();
foreach ($pArr as $p) {
$e->addP();
}
(そのコードをあまり深く見ないでください。私のコントローラーではそれほどお粗末ではありませんが、基本的にはまだforeach($pArr as $p)
onを実行しています$e->addP($p)
)。
最終的に、コレクション E にはそのようなオブジェクトが含まれます。
"$pushAll": {
"p": [
"0": ObjectId("4f4ba859c883fdf85e00313a"),
"1": ObjectId("4f4ba859c883fdf85e003af2")
]
},
"_id": ObjectId("4f4bb608c883fd7860000001"),
"createdat": ISODate("2012-02-27T16: 57: 44.0Z"),
$pushAll フィールドがあるのは奇妙だと思いましたが、$e->getP(); で読み取ることができます。
ただし、ファイルを E に添付しようとすると停止します。
/**
* @MongoDB\ReferenceMany(targetDocument="P", simple="true")
* @MongoDB\Index
*/
protected $p = array();
/** @MongoDB\File */
private $file;
$e->setFile($filename)
永続化/フラッシュしようとすると、そのエラーが発生するためです。
[MongoCursorException]
document to insert can't have $ fields
明らかにその奇妙な$pushAll
フィールドを参照するエラー。
その種のエントリを使用して MongoDB のドキュメントを手動で変更すると、次のようになります。
"p": [
"0": ObjectId("4f4ba859c883fdf85e00313a"),
"1": ObjectId("4f4ba859c883fdf85e003af2")
],
"_id": ObjectId("4f4bb608c883fd7860000001"),
"createdat": ISODate("2012-02-27T16: 57: 44.0Z")
...その後、すべて問題なく、エラーなしでファイルを保存できます。
わかりました、それは私が何かを見逃しているか、その部分で十分なRTFMがなかったように聞こえますがReferenceMany
、誰かがすでにそれに取り組んでいるかどうかを確認するためにここに来ました.
乾杯。