Php Doctrine MongoDB ODM加载参考文档

Php Doctrine MongoDB ODM加载参考文档,php,mongodb,doctrine-orm,doctrine,Php,Mongodb,Doctrine Orm,Doctrine,我的szenario详细介绍,iv'e有一个用户文档: /** @Document(collection="user") */ class User { /** @Id */ private $id; /** @ReferenceMany(targetDocument="Pet") */ private $pet; public function getPet() { return $this->pet; } }

我的szenario详细介绍,iv'e有一个用户文档:

/** @Document(collection="user") */
class User
{
    /** @Id */
    private $id;

    /** @ReferenceMany(targetDocument="Pet") */
    private $pet;

    public function getPet()
    {
        return $this->pet;
    }
}
我有一份宠物文件:

/** @Document(collection="pet") */
class Pet
{
    /** @Id */
    private $id;

    /** @ReferenceMany(targetDocument="User") */
    private $user;

    public function getUser()
    {
        return $this->user;
    }
}
多对多关联。如果我为现有文档调用以下代码

$result = $this->_dbContainer->getDocumentManager()->getRepository('User')->findBy(array('id' => => 'XZTZHJ323LKFHGJKLHGFGHJK'));
print_r($result->toArray());
…它以一个无休止的循环结束。错误消息:

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 112721921 bytes) in ...
如果我执行以下代码:

var_dump($result->count());
var_dump($result->current());
结果是1/它存在(一切正常)。$result->current()的var_转储为空。getMongoData方法返回以下数据(正确):

如果我执行以下代码:

var_dump($result->count());
var_dump($result->current());
结果是布尔值(false)


有什么想法吗?

前提是您的模型看起来像这样

/**
 * @Document
 */
class User
{
    /** @Id */
    private $id;

    /** @ReferenceMany(targetDocument="Something") */
    private $somethings;

    public function __construct()
    {
        $this->somethings = new \Doctrine\Common\Collections\ArrayCollection;
    }

    public function getSomethings()
    {
        return $this->somethings;
    }
}
您应该能够使用

$user = $dm->find('User', $id);
$somethings = $user->getSomethings();
$firstSomething = $somethings->current(); // will return false if empty, can also use first()
foreach ($somethings as $something) {
    // and so on
}

不要试图
var\u dump()
打印模型代理对象。它们包含许多递归引用,如果试图将它们呈现为输出,则会耗尽可用内存。

从引用的集合中获取单个对象的解决方案:

$pets = $this->user->getPets();     
if(!is_null($pets) && $pets->count() > 0) {
   $this->pet = $pets->first();
}
最大的收获(感谢@Phil):

不要尝试使用var_dump()或 打印模型代理对象。 这些函数包含许多递归函数 引用,您将耗尽您的精力 试图渲染的可用内存 将它们作为输出

致以最良好的祝愿,
Stephan

尝试重新生成Hydrotor类。

很抱歉,它对我不起作用,我的属性有以下注释(与您的示例相同的文档结构)/***@ReferenceMany(targetDocument=“ExampleReferenceDocument”)*/-结果迭代器->count()显示“1”(它得到了一个结果)但是如果我想用电流得到它,我只得到空值?理论层有一些问题。。。如果我在PersistentCollection结果中调用toArray()方法,脚本将终止,并在错误日志中发现以下消息:PHP致命错误:允许的内存大小已耗尽。。。插入到数据库中没有任何问题,该死。@Stephan我已经更新了我的答案,将其更改为
ReferenceMany
模型,并添加了更多信息,特别是关于
var\u dump()
首先,非常感谢Phil的支持!)不幸的是,更改并没有成功结束,我忘记在构造函数中初始化ArrayCollection,但是$pet->current()的结果为false,同时$pet->count()返回1-一个pet也存在于数据库中,具有正确的引用。。。我很高兴有其他建议!对于转储,我建议执行
\Doctrine\Common\Util\Debug::dump($variable)
这有助于转储Doctrine对象,以便在读取之前执行