2015-05-01 112 views
1

在我Gecko.php我有以下部分:Symfony的具有一對多的關係2刪除實體

/** 
    * @ORM\OneToMany(targetEntity="Weight", mappedBy="geckoId") 
    */ 
    private $weights; 

在我Weight.php我有這樣的:

/** 
* @ORM\ManyToOne(targetEntity="Gecko", inversedBy="weights") 
* @ORM\JoinColumn(name="gecko_id", referencedColumnName="id") 
*/ 
private $geckoId; 

我的壁虎刪除操作如下:

/** 
* Deletes a Gecko entity. 
* 
* @Route("/{name}", name="gecko_delete") 
* @Method("DELETE") 
*/ 
public function deleteAction(Request $request, $name) 
{ 
    $form = $this->createDeleteForm($name); 
    $form->handleRequest($request); 

    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $entity = $em->getRepository('BreedrGeckoBundle:Gecko')->findOneByName($name); 

     if (!$entity) { 
      throw $this->createNotFoundException('Unable to find Gecko entity.'); 
     } 

     $em->remove($entity); 
     $em->flush(); 
    } 

    return $this->redirect($this->generateUrl('gecko')); 
} 

當我單擊表格刪除按鈕,我得到這個錯誤:

An exception occurred while executing 'DELETE FROM Gecko WHERE id = ?' with params [5]:

SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (breedr . weight , CONSTRAINT FK_615077FC45D556 FOREIGN KEY (gecko_id) REFERENCES Gecko (id))

我不知道如何解決這個問題。當數據庫中沒有特定壁虎的權重時,它們會被刪除,但如果有權重,則不會被刪除。我非常希望能夠在同一時間,壁虎事先刪除

感謝

安迪

刪除所有重量數據
+0

不知道爲什麼有人會低估這個,這個問題沒有錯? –

+0

標題中是否有使用* gecko *的理由?壁虎是Firefox的工程師,也許它迷惑了某人。您可以通過將* gecko *替換爲* entity *來改進標題。 –

+0

這是一個公平點,只提及它,因爲它是我的情況:) –

回答

1
/** 
* @ORM\OneToMany(targetEntity="Weight", mappedBy="geckoId", cascade={"persist", "remove"}) 
*/ 
private $weights; 

級聯操作添加到的權重,所以每當壁虎將被更新或刪除,與之相關的權重也將被更新/刪除。

1

如果不手動刪除父的所有實體刪除它之前的實體,你會得到這樣的錯誤。您可以遍歷所有國有實體和刪除父之前手動刪除它們,或者您可以設置學說自動級聯刪除操作:

Doctrine Cascade Operations

相關問題