Symfony3 - 使用OneToMany删除实体 - Doctrine中的关系 - 级联不起作用

时间:2017-12-07 09:53:08

标签: symfony doctrine-orm entity-relationship

我的问题:我有两个实体:

/**
 * 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无法删除或   更新父行:外键约束失败   (edutalkteaching_event,CONSTRAINT FK_F2B1088B57042871外国   KEY(time_table_entry_id)参考time_table_entryid))

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

我无法对你的帖子发表评论,所以我将其作为答案发布。

您的问题是,您有另一个实体TeachingEvent,其中引用了TimeTableEntry。当您尝试删除TimeTableEntry时,这是不可能的,因为此time_table_entry_id仍被引用为TeachingEvent表中的外键。

在删除TimeTableEntry之前,首先应将其与TeachingEvent取消关联。我没有您的代码,但根据TimeTableEntryTeachingEvent相互关联的方式,它可能类似于:

$teachingEvent->setTimeTableEntry(null);

$timeTableEntry->setTeachingEvent(null);