好的伙计们,要么我错过了一些大事,要么我只是走错了。
这是一个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。
我用doctrine:mongodb:generate:documents
生成了E的getter / setter。
当我宣布一个新的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)
。
我最终收集了我的收藏品中的那种物品:
"$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")
...然后一切都很好,我可以保存我的文件没有任何错误。
好吧,听起来我错过了某些东西,或者我ReferenceMany
部分没有RTFM,但我仍然来这里看看有人已经进入了那个。
干杯。
答案 0 :(得分:2)
你可能已经想到了这一点。但Doctrine MongoDB ODM目前在使用GridFS集合时遇到了重大麻烦。参考文献坏了。