Doctrine ODM:未在两个文档上创建引用

Doctrine ODM:未在两个文档上创建引用,doctrine,doctrine-orm,doctrine-odm,Doctrine,Doctrine Orm,Doctrine Odm,假设我有两个像这样的简单文档,一个人可以有很多文件,但一篇文件只能属于一个人 namespace Dashboard\Document; 使用条令\ODM\MongoDB\Mapping\ClassMetadata; 使用条令\ODM\MongoDB\Mapping\Annotations作为ODM; /**@ODM\Document(db=“testing”,collection=“person”) *@ODM\InheritanceType(“每个类的集合”) */ 班主任 { /** *@

假设我有两个像这样的简单文档,一个人可以有很多文件,但一篇文件只能属于一个人

namespace Dashboard\Document;
使用条令\ODM\MongoDB\Mapping\ClassMetadata;
使用条令\ODM\MongoDB\Mapping\Annotations作为ODM;
/**@ODM\Document(db=“testing”,collection=“person”)
*@ODM\InheritanceType(“每个类的集合”)
*/
班主任
{
/**
*@ODM\Id
*/
受保护的$id;
/**@ODM\Field(type=“string”)*/
受保护的$slug;
/**@ODM\Field(type=“string”)*/
受保护的$名称;
/**@ODM\ReferenceMany(targetDocument=“Paper”,cascade={“all”})*/
受保护的文件;
公共函数获取($property){
返回$this->$属性;
}
公共函数集($property,$value){
$this->$property=$value;
}
公共职能toArray(){
返回get\u object\u vars($this);
}
}
namespace Dashboard\Document;
使用条令\ODM\MongoDB\Mapping\ClassMetadata;
使用条令\ODM\MongoDB\Mapping\Annotations作为ODM;
/**@ODM\Document(db=“testing”,collection=“paper”)
*@ODM\InheritanceType(“每个类的集合”)
*/
课堂论文
{
/**
*@ODM\Id
*/
受保护的$id;
/**@ODM\Field(type=“string”)*/
受保护的$名称;
/**@ODM\ReferenceOne(targetDocument=“Person”,cascade={“all”})*/
受保护的人;
公共函数获取($property){
返回$this->$属性;
}
公共函数集($property,$value){
$this->$property=$value;
}
公共职能toArray(){
返回get\u object\u vars($this);
}
}
我想我在某个地方读到过,当你在一端创建一个引用时,ODM会自动为你在两边创建引用。因此,如果我执行下面的语句,我将看到纸质文档中对Person的引用,以及Person文档中对纸质文档的引用

//为了演示$person已包含一个person文档
试一试{
$paper=$dm->getRepository('\Dashboard\Document\paper')
->查找($paperId);
}捕获(\Doctrine\ODM\MongoDB\MongoDBException$e){
$this->setStatusFailure($e->getMessage());
$this->sendResponse();
}    
$paper->person=$person;
$dm->persist($paper);
$dm->flush();
当我这样做并检查mongodb时,来自纸张-->person的引用就在那里。但我没有看到db中显示的参考人-->论文。我认为级联注释对此有所帮助,但显然我遗漏了一些东西

如何确保引用包含在两端,以便运行查询以查看属于一个人的所有论文?这是必须手动完成的,还是我可以让条令帮我处理

更新

这一页的第一段让我觉得这是可能的


原来我应该读整页。如果我使用mappedBy&inversedBy,并始终将具有inversedBy的文档保存在其注释中,那么我就得到了双向关系

/** @ODM\ReferenceOne(targetDocument="Person", cascade={"all"}, inversedBy="papers") */
protected $person;

//Will give me a relationship I can query on both sides
$person->papers->add($paper);