我有一份文件,其中包含对其他一些文件的引用。像大多数人一样,我在URL中的“id”字段中使用MongoId来查看这些文档。情况是我想显示主文档中这些引用文档的链接。为了获取引用文档的ID,我使用的代码如下:
$mainDocument->getReferencedDoc()->getId();
这里显而易见的烦恼是,doctrine会运行另一个查询来获取引用的文档,这样我才能获得ID。但是ID在技术上已经存在于参考字段的主文档中。难道不存在更有效的方法来获取ID而无需查询和保存整个引用文档吗?每次我想要这样做时,我是否必须编写自定义查询?
当您生成包含指向其引用文档的链接的主要文档的大型列表时,问题变得非常重要。
答案 0 :(得分:0)
最简单的方法是在Document类中添加第二个属性。
/**
* @ReferenceOne(targetDocument="SomeOtherDocument", simple=true)
*/
protected $referencedDoc;
/**
* @Field(name="referencedDoc", type="string")
*/
protected $referencedDocId;
现在你可以做$document->getReferencedDocId();
。
由于type = string,我不能完全确定这是可能的。
我确实将它与ORM一起使用,但尚未与ODM一起使用。
答案 1 :(得分:0)
自从this提交2月6日以来,它似乎 的行为方式。因此,使用最新的mongodb-odm解决了这个问题。
答案 2 :(得分:0)
如果某人需要正确的方法如何在没有(!)延迟加载的情况下获取引用的MongoDB文档的标识符,那就是它:
/** @var $metaData \Doctrine\ODM\MongoDB\Mapping\ClassMetadata */
$metaData = $this->documentManager->getClassMetadata('SomeReferencedDocument');
$metaData->getIdentifierValue($object->getSomeReferencedDocument())
而不是(仍然使用最新的DoctrineODMBundle延迟加载引用的文档):
$object->getSomeReferencedDocument()->getId();