我在文档User中引用了一个文档Person。当我检索User时,它没有嵌入Person对象,而是Person代理对象。有没有办法“强制”代理成为“完整”文档(所以Person proxy => Person)。
我尝试调用一种方法来检索其他数据(因此__load被触发,但该对象仍然是'代理'版本。
我希望有人能够比ODM的文件更能说明这一点。
答案 0 :(得分:2)
您可以通过Priming References完成此操作。
示例文档:
/** @Document */
class User
{
/** @ReferenceOne(targetDocument="Person") */
private $person;
}
/** @Document */
class Person
{
// ...
}
使用QueryBuilder:
/* @var $user User */
$user = $dm->createQueryBuilder('User')
->field('person')->prime(true)
->getQuery()
->getSingleResult();
答案 1 :(得分:2)
您不需要提取原始对象,因为Proxy类应该对您的代码100%透明。
如果您需要序列化文档,例如通过API发送文档,请务必在文档上正确实施serialize()
方法。
如果您仍然需要在没有代理的情况下获取引用的文档,您可以prime()
或使用指定hydrate(false)
的单独查询来获取它:
$user = $dm->createQueryBuilder('Person')
->field('_id')->equals($user->getPerson()->getId())
->hydrate(false)
请参阅: Doctrine ODM Doc: Disabling hydration了解更多信息。