2013-12-11 57 views
0

我有一個名爲元素的PHP模型類,它有一個多對多的自引用。我創建了一個多對多的關係那樣:Doctrine2:瀏覽器凍結使用多對多自引用

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 ... 
} 

再說,我有元素的空庫:

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引用,它將完美運行。

任何人都可以幫助我嗎?提前致謝。

+0

也許在myElements中有一個元素。也許這會導致一個infine循環?有沒有錯誤信息? – tiriana

+0

DB或應用程序中沒有任何關係,只有幾個元素。沒有錯誤信息,只會凍結。 – Juanan

回答

0

好吧,我解決了這個更新控制器的行爲。幾天前我改變了模型,所以我認爲一些舊的方法或者物體仍然存在。如果任何人有同樣的問題,我建議cheking整個控制器,不僅是導致錯誤的代碼行。

+0

好吧,我現在確定,出現問題是因爲print_r(),由於某種原因,它不能顯示數據。 – Juanan