Symfony2 + Doctrine MongoDB ODM - flush()时嵌套级别太深

时间:2014-03-08 04:43:25

标签: php mongodb symfony doctrine odm

我遇到Symfony2和Doctrine2 ODM(mongoDB)的问题。我正在尝试将一个对象持久保存到我的名为“Status”的集合中。这是一个非常简单的对象,绝对没有引用,只有一个名为“name”的属性。这是我的状态文档类的代码。

<?php
namespace Site\BlablaBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
 * Status
 *
 * @MongoDB\Document(repositoryClass="Site\BlablaBundle\Repository\StatusRepository")
 */
class Status
{
/**
 * @MongoDB\Id(strategy="AUTO")
 */
protected $id;

/**
 * @MongoDB\String
 */
protected $name;

/**
 * Get id
 *
 * @return id $id
 */
public function getId()
{
    return $this->id;
}

/**
 * Set name
 *
 * @param string $name
 * @return self
 */
public function setName($name)
{
    $this->name = $name;
    return $this;
}

/**
 * Get name
 *
 * @return string $name
 */
public function getName()
{
    return $this->name;
}

}

当我尝试从EventListener或我的Controller中持久化Status对象时,我遇到了一个无法修复的问题。

<?php
$status = new Status();
$status->setName('Hello');
$documentManager->persist($status);
$documentManager->flush();

执行flush()方法时出现此错误:

(!)致命错误:嵌套级别太深 - 递归依赖?在第483行的C:\ wamp \ www \ symfony \ vendor \ doctrine \ mongodb \ lib \ Doctrine \ MongoDB \ Cursor.php

这个问题最奇怪的部分是我的Status对象存储在数据库中但是引发了这个错误导致我的代码崩溃。我只是不知道如何解决它......

如果有人遇到此问题并知道如何修复它,那将非常有用:)

谢谢!

2 个答案:

答案 0 :(得分:0)

这是一个php配置错误:你在深度函数中使用symfony太多了,比如$ this-&gt; function1-&gt; function2 ..... function100

这不是你的代码,但要记住所有symfony都是面向对象......

要解决此问题,您应该在php.ini中提高嵌套值限制,然后重新启动apache

答案 1 :(得分:0)

谢谢!我看到了问题...我在我的php.ini(Apache使用的那个,而不是PHP CLI)中提出了我的max_input_nesting_level参数并重新启动了Apache,phpinfo()告诉max_input_nesting_level值被更新,但不幸的是仍然出现了错误。 ..

也许还有另一个要编辑的参数?

谢谢!