ReferenceMany создает поле $pushAll, которое выдает ошибку при попытке сохранить файл MongoGridFs.

Хорошо, ребята, либо я пропустил что-то большое, либо я просто наткнулся на ошибку.

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

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

  • E ссылается на многие P:

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

Я создал геттер/сеттер 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) на $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, но я все же пришел сюда, чтобы посмотреть, не занимался ли кто-то этим.

Ваше здоровье.


person bPizzi    schedule 27.02.2012    source источник


Ответы (1)


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

person Erik Ellis    schedule 14.03.2012
comment
Спасибо, вы правы, это была ошибка доктрины. Я, наконец, сделал грязный обходной путь для этого... - person bPizzi; 19.04.2012