Symfony 2删除具有oneToMany关系的实体

时间:2015-05-01 12:56:39

标签: php symfony

在我Gecko.php我有以下部分:

    /**
     * @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'));
}

当我单击表单中的删除按钮时,出现此错误:

  

执行' DELETE FROM Gecko时发生异常WHERE id =?'   与params [5]:

     

SQLSTATE [23000]:完整性约束违规:1451无法删除或   更新父行:外键约束失败   (breedrweight,CONSTRAINT FK_615077FC45D556 FOREIGN KEY   (gecko_id)参考Geckoid))

我不知道如何解决这个问题。当数据库中没有特定壁虎的权重时,它们会删除很好,但是如果有任何权重,它就不会被删除。理想情况下,我希望能够在删除壁虎的同时删除所有重量数据

提前致谢

安迪

2 个答案:

答案 0 :(得分:1)

如果在删除之前没有手动删除父实体的拥有实体,则会出现这样的错误。您可以循环访问所有拥有的实体并在删除父项之前手动删除它们,也可以将Doctrine设置为自动级联删除操作:

Doctrine Cascade Operations

答案 1 :(得分:1)

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

向权重添加级联操作,因此每当更新或删除Gecko时,与其相关的权重也将被更新/删除。