好吧,伙计们,要么我错过了一些大事,要么我只是踩到了一个虫子。
那是一个 Sf2 (v2.0.9) / Doctrine ODM (1.0.0BETA) 项目。
基本上,我有两个文件,我们称它们为 E 和 P:
E引用很多P:
/** * @MongoDB\ReferenceMany(targetDocument="P", simple="true") * @MongoDB\Index */ protected $p = array();
我不在乎能够从 P 中检索相应的 E。
我已经生成了 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)
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
,但我仍然来这里看看是否有人已经参与其中。
干杯。