删除相关实体Symfony2

时间:2015-05-31 19:34:24

标签: symfony orm doctrine-orm

我有相关的实体。多对多关系和注释仅存在于一个实体上:

/**
 * @ORM\ManyToMany(targetEntity="Event")
 * @ORM\JoinTable(name="viewed_events",
 *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="event_id", referencedColumnName="id")}
 *      )
 **/
protected $viewedEvents;

问题是当我尝试删除事件实体时出现Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails错误。我该如何解决这个问题?我尝试像这样添加orphanRemoval=true@ORM\ManyToMany(targetEntity="Event", orphanRemoval=true)并尝试添加cascade="delete"cascade="all",但没有成功。

2 个答案:

答案 0 :(得分:2)

我举一个简单的例子,以便您可以找出在应用程序中添加/更改的内容。

假设学生和课程实体之间存在M-N关系。

<强>学生

class Student
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\OneToMany(targetEntity="StudentCourse", mappedBy="studentInverse", cascade={"persist", "remove"})
     */
    protected $studentInverse;

    public function __construct()
    {
        $this->studentInverse = new \Doctrine\Common\Collections\ArrayCollection();
    }
}

<强> COURSE

class Course
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\OneToMany(targetEntity="StudentCourse", mappedBy="courseMap", cascade={"persist", "remove"})
     */
    protected $courseInverse;

    public function __construct()
    {
        $this->courseInverse = new \Doctrine\Common\Collections\ArrayCollection();
    }
}

STUDENTCOURSE (这是你更感兴趣的那个)

class StudentCourse
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="Course", inversedBy="courseInverse")
     * @ORM\JoinColumn(name="course", referencedColumnName="id", nullable=false, onDelete="CASCADE")
     */
    protected $courseMap;

    /**
     * @ORM\ManyToOne(targetEntity="Student", inversedBy="studentInverse")
     * @ORM\JoinColumn(name="student", referencedColumnName="id", nullable=false, onDelete="CASCADE")
     */
    protected $studentMap;
}

答案 1 :(得分:1)

onDelete="CASCADE"

On Yours JoinColumn。

相关问题