在我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无法删除或 更新父行:外键约束失败 (
breedr
。weight
,CONSTRAINTFK_615077FC45D556
FOREIGN KEY (gecko_id
)参考Gecko
(id
))
我不知道如何解决这个问题。当数据库中没有特定壁虎的权重时,它们会删除很好,但是如果有任何权重,它就不会被删除。理想情况下,我希望能够在删除壁虎的同时删除所有重量数据
提前致谢
安迪
答案 0 :(得分:1)
如果在删除之前没有手动删除父实体的拥有实体,则会出现这样的错误。您可以循环访问所有拥有的实体并在删除父项之前手动删除它们,也可以将Doctrine设置为自动级联删除操作:
答案 1 :(得分:1)
/**
* @ORM\OneToMany(targetEntity="Weight", mappedBy="geckoId", cascade={"persist", "remove"})
*/
private $weights;
向权重添加级联操作,因此每当更新或删除Gecko时,与其相关的权重也将被更新/删除。