有没有更聪明的方法来获取引用的文档ID而不查询它并保湿?

时间:2012-06-26 17:18:16

标签: symfony doctrine doctrine-orm doctrine-odm

我有一份文件,其中包含对其他一些文件的引用。像大多数人一样,我在URL中的“id”字段中使用MongoId来查看这些文档。情况是我想显示主文档中这些引用文档的链接。为了获取引用文档的ID,我使用的代码如下:

$mainDocument->getReferencedDoc()->getId();

这里显而易见的烦恼是,doctrine会运行另一个查询来获取引用的文档,这样我才能获得ID。但是ID在技术上已经存在于参考字段的主文档中。难道不存在更有效的方法来获取ID而无需查询和保存整个引用文档吗?每次我想要这样做时,我是否必须编写自定义查询?

当您生成包含指向其引用文档的链接的主要文档的大型列表时,问题变得非常重要。

3 个答案:

答案 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();