Doctrine2:浏览器使用多对多自引用冻结

时间:2013-12-11 03:19:17

标签: symfony doctrine-orm

我有一个名为Elements的PHP模型类,它有一个多对多的自引用。我已经创建了一个ManyToMany关系:

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

 /**
  * Elements
  *
  * @ORM\Table()
  * @ORM\Entity(repositoryClass="Evalfor\GescompevalBundle\Entity\ElementsRepository")
  */
class Elements
{
  // Constants
  const COMPETENCE = "competence";
  const RESULT = "result";

/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

// ... More attributes ...

/**
 * @ORM\ManyToMany(targetEntity="Elements", mappedBy="myElements")
 **/
private $elementsWithMe;

/**
 * @ORM\ManyToMany(targetEntity="Elements", inversedBy="elementsWithMe")
 * @ORM\JoinTable(name="connected_elements"),
 *      joinColumns={@ORM\JoinColumn(name="element_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="connected_element_id", referencedColumnName="id")}
 *      )
 **/
private $myElements;


/**
 * Construct
 *
 */
public function __construct() {
    $this->elementsWithMe = new \Doctrine\Common\Collections\ArrayCollection();
    $this->myElements = new \Doctrine\Common\Collections\ArrayCollection();
}

public function addElement(Elements $element)
{
    $element->addElement($this);
    $this->myElements[] = $element;

    return $this;
}

public function getElements(){
    return $this->myElements;
}

// ... More methods ...
}

此外,我有一个空的Elements资料库:

use Doctrine\ORM\EntityRepository;
class ElementsRepository extends EntityRepository
{
}

最后,我有一个元素控制器:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Evalfor\GescompevalBundle\Entity\Elements;
use Evalfor\GescompevalBundle\Form\ElementsType;
use Symfony\Component\HttpFoundation\Request;

class ElementsController extends Controller
{
    // ... Some methods ...

    public function updateAction($type)
    {
      $em = $this->getDoctrine()->getManager();
      $elements_all = $this->getDoctrine()->getRepository('EvalforGescompevalBundle:Elements')->findAll();
      print_r($elements_all); exit;

     // ...
    }
}

问题在于,当我调用findAll()方法时,浏览器会冻结(对于其他类似的方法也是如此),但是如果我删除了Elements类中的所有ManyToMany引用,它就能完美运行。

任何人都可以帮我这个吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

好的,我解决了这个更新控制器的动作。我几天前改变了模型,所以我想一些旧的方法或对象仍然存在。如果有人遇到同样的问题,我建议检查整个控制器,而不仅仅是导致错误的代码行。