ReferenceMany генерирует поле $ pushAll, которое выдает ошибку при попытке сохранить файл MongoGridFs - PullRequest
0 голосов
/ 27 февраля 2012

Ладно, ребята, либо я что-то упустил, либо я просто обнаружил ошибку.

Это проект Sf2 (v2.0.9) / Doctrine ODM (1.0.0BETA).

По сути, у меня есть два документа, назовем их E и P:

  • E ссылается на множество P:

       /**
        * @MongoDB\ReferenceMany(targetDocument="P", simple="true")
        * @MongoDB\Index
        */
        protected $p = array();
    
  • IМне все равно, чтобы иметь возможность получать соответствующие E из P.

Я сгенерировал E getter / setter с помощью 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) на $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) и сохраняю / сбрасываю, я получаюror:

[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,но я все еще приходил сюда, чтобы посмотреть, кто-то уже вошел в это.

Приветствия.

1 Ответ

2 голосов
/ 14 марта 2012

Вы, наверное, уже поняли это.Но в настоящий момент у Doctrine MongoDB ODM большие проблемы с работой с коллекциями GridFS.Ссылки ломаются плохо.

...