2015-05-01 111 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

相关问题