0

わかりました、何か大きなものを見逃しているか、バグを踏んでいます。

これは 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、誰かがすでにそれに取り組んでいるかどうかを確認するためにここに来ました.

乾杯。

4

1 に答える 1

2

あなたはおそらくすでにこれを理解しています。しかし、Doctrine MongoDB ODM は現在、GridFS コレクションの操作で大きな問題を抱えています。参照が壊れます。

于 2012-03-14T14:29:13.633 に答える