一个实体项目可以有很多人,很多小伙伴,每个项目一个高概念。用户可以有很多项目。然后,当我要删除项目时,出现以下错误消息:
在执行“ DELETE FROM projets WHERE id =?”时发生异常。带有参数[2]:
SQLSTATE [23000]:违反完整性约束:1451无法删除或更新父行:外键约束失败(
config.xml
。writtle
,CONSTRAINTpersonnages
外键({{ 1}})参考文献FK_286738A6C18272
(projet_id
))
这是我的实体:
人物实体
projets
Projet实体
id
Chapitre实体
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Chapitre", mappedBy="personnages")
* @ORM\JoinColumn(name="projet_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $chapitres;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Projets", inversedBy="personnages")
* @ORM\JoinColumn(name="projet_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $projet;
HighConcept
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="projets")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Personnages", mappedBy="projet")
*/
private $personnages;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Chapitre", mappedBy="projet", cascade={"remove"})
* @ORM\joinColumn(onDelete="SET NULL")
*/
private $chapitres;
用户实体
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Projets", inversedBy="chapitres")
*/
private $projet;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Personnages", inversedBy="chapitres")
*/
private $personnages;
我不知道该如何关联,我尝试了诸如
/**
* @ORM\OneToOne(targetEntity="App\Entity\Projets", cascade={"persist", "remove"})
*/
private $projet;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="highconcepts")
*/
private $user;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Projets", mappedBy="user")
*/
private $projets;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Highconcept", mappedBy="user")
*/
private $highconcepts;
JoinColumn
之类的事情...
我看到了一些主题,但我认为我使用正确。
答案 0 :(得分:0)
考虑到您要删除项目中包含的所有实体,建议您使用Doc中所述的orphanRemoval
选项。
还有一个级联概念,仅当从集合中删除实体时才相关。如果类型A的实体包含对私有实体B的引用,则如果删除了从A到B的引用,则也应删除实体B,因为不再使用它。
使您实体的成员看起来像:
/**
* @ORM\OneToMany(targetEntity="App\Entity\Personnages", mappedBy="projet", orphanRemoval=true)
*/
private $personnages;