2015-03-25 55 views
1

我創建了一個具有自引用的實體。我的實體是這樣的:持久自引用實體不起作用

class Question 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="Question", mappedBy="parent") 
    **/ 
    private $children; 

    /** 
    * @ORM\ManyToOne(targetEntity="Question", inversedBy="children") 
    * @ORM\JoinColumn(name="parent_id", referencedColumnName="id") 
    **/ 
    private $parent; 
} 

而且我創建了一個窗體來編輯一個問題。有了這個表格,我可以添加許多孩子到一個問題。在我發佈這個表單後,我將保存父對象的子對象。但是對於父母而言,孩子的堅持失敗了,數據庫中沒有任何事情發生。

public function manageDependencyAction(Request $request, $id) 
{ 
    $em = $this->getDoctrine()->getManager(); 
    $question = $em->getRepository('AppMyBundle:Question')->find($id); 

    if (!$question) { 
     $this->get('session')->getFlashBag()->add('danger', $this->get('translator')->trans('objectNotFound')); 
     return $this->redirect($this->generateUrl('app_question_list')); 
    } 

    $form = $this->createForm($this->get('form.type.question'), $question, array())->add('save', 'submit', array('label' => 'save', 'translation_domain' => 'messages', 'attr' => array('class' => 'btn btn-primary'))); 
    $form->handleRequest($request); 

    if ($form->isValid()) { 

     // dump($question->getChildren()); // This is not empty. In this array are the selected childs. 

     $em->persist($question); 
     $em->flush(); 
    } 
} 
+1

孩子是反的一面,但在教義自動持久性僅適用於持有端 – ghanbari 2015-03-25 06:35:57

回答

3

改變你的實體的方法:

public function addChild(Question $children) 
{ 
    $this->children[] = $children; 
    $children->setParent($this); 

    return $this; 
}