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