我的问题:我有两个实体:
/**
* Course
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\CourseRepository")
*/
class Course
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \Doctrine\Common\Collections\ArrayCollection()
*
* @ORM\OneToMany(targetEntity="AppBundle\Entity\TimeTableEntry", mappedBy="course", cascade={"remove"}, orphanRemoval=true)
*
*/
private $timeTableEntries;
/**
* @var boolean
*
* @ORM\Column(name="enabled", type="boolean", nullable=true)
*/
private $enabled;
和
/**
* TimeTableEntry
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\TimeTableEntryRepository")
*/
class TimeTableEntry
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \Doctrine\Common\Collections\ArrayCollection()
*
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Course", inversedBy="timeTableEntries", cascade={"ALL"})
* @ORM\JoinColumn(name="course_id", referencedColumnName="id", nullable=true, onDelete="CASCADE")
*/
private $course;
你可以看到我尝试了所有我可以用cascade = {“ALL”},onDelete =“CASCADE”和orphanRemoval = true。
当我想删除课程实体时,我得到错误消息:
SQLSTATE [23000]:完整性约束违规:1451无法删除或 更新父行:外键约束失败 (
edutalk
。teaching_event
,CONSTRAINTFK_F2B1088B57042871
外国 KEY(time_table_entry_id
)参考time_table_entry
(id
))
有人可以帮忙吗?
答案 0 :(得分:2)
我无法对你的帖子发表评论,所以我将其作为答案发布。
您的问题是,您有另一个实体TeachingEvent
,其中引用了TimeTableEntry
。当您尝试删除TimeTableEntry
时,这是不可能的,因为此time_table_entry_id
仍被引用为TeachingEvent
表中的外键。
在删除TimeTableEntry
之前,首先应将其与TeachingEvent
取消关联。我没有您的代码,但根据TimeTableEntry
和TeachingEvent
相互关联的方式,它可能类似于:
$teachingEvent->setTimeTableEntry(null);
或
$timeTableEntry->setTeachingEvent(null);