Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何强制Doctrine MongoDB ODM文档代理转换为';原件';文件?_Php_Mongodb_Doctrine Odm - Fatal编程技术网

Php 如何强制Doctrine MongoDB ODM文档代理转换为';原件';文件?

Php 如何强制Doctrine MongoDB ODM文档代理转换为';原件';文件?,php,mongodb,doctrine-odm,Php,Mongodb,Doctrine Odm,我在文档用户中引用了一个文档人员。当我检索用户时,它并没有嵌入Person对象,而是嵌入了Person代理对象。是否有一种方法可以“强制”代理成为“完整”文档(因此Person proxy=>Person) 我尝试调用一个方法来检索其他数据(因此会触发加载,但对象仍然是“代理”版本) 我希望有人能比ODM的文档更清楚地说明这一点。您可以通过以下方式完成这一点 示例文档: /** @Document */ class User { /** @ReferenceOne(targetDocum

我在文档用户中引用了一个文档人员。当我检索用户时,它并没有嵌入Person对象,而是嵌入了Person代理对象。是否有一种方法可以“强制”代理成为“完整”文档(因此Person proxy=>Person)

我尝试调用一个方法来检索其他数据(因此会触发加载,但对象仍然是“代理”版本)


我希望有人能比ODM的文档更清楚地说明这一点。

您可以通过以下方式完成这一点

示例文档:

/** @Document */
class User
{
    /** @ReferenceOne(targetDocument="Person") */
    private $person;
}

/** @Document */
class Person
{
    // ...
}
/* @var $user User */
$user = $dm->createQueryBuilder('User')
    ->field('person')->prime(true)
    ->getQuery()
    ->getSingleResult();
使用QueryBuilder:

/** @Document */
class User
{
    /** @ReferenceOne(targetDocument="Person") */
    private $person;
}

/** @Document */
class Person
{
    // ...
}
/* @var $user User */
$user = $dm->createQueryBuilder('User')
    ->field('person')->prime(true)
    ->getQuery()
    ->getSingleResult();

您不需要提取原始对象,因为代理类对您的代码应该是100%透明的

如果需要序列化文档,例如通过API发送文档,请确保在文档上正确实现
serialize()
方法

如果仍然需要在不使用代理的情况下获取引用文档,则可以使用
prime()
获取该文档,也可以通过指定
hydrate(false)
的单独查询获取该文档:

见:
更多信息。

这听起来像是在尝试在非关系数据库中建立关系。好吧,我相信您指出的是延迟加载引用信息?这到底是如何困扰您的应用程序还是您试图解决的问题?此查询会引发异常,因为在使用prime之后,您不能使用limit lgetSingleResult()上的ike。