2017-12-07 23 views
0

私の問題を動作しないカスケード:uは私が行うことができ、すべて試した見ることができるようにSymfony3 - ドクトリンにおける関係 - - OneToManyでエンティティを削除します

/** 
* 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; 

:私は2つのエンティティを持っていますカスケード= {"ALL"}、onDelete = "CASCADE"、orphanRemoval = trueの場合

私はコースエンティティを削除したい場合は、私はにErrorMessageを得る:

SQLSTATE [23000]:整合性制約違反:1451は、親行を削除したり、 更新することはできません:外部キー制約は (edutalkを失敗しました。 teaching_event、CONSTRAINT FK_F2B1088B57042871 FOREIGN KEY(time_table_entry_id)がtime_table_entryid)を参照)

誰かが助けることはできますか?

+0

エンティティだけでなく、スニペットを共有してください。 –

+0

さて、私はそれをした;) – Slowwie

答えて

2

投稿にはコメントできませんので、回答として投稿します。

TeachingEventという別のエンティティがTimeTableEntryを参照しているという問題があります。 TimeTableEntryを削除しようとすると、このtime_table_entry_idがまだTeachingEventテーブルの外部キーとして参照されているため、これは不可能です。

TimeTableEntryを削除する前に、まずTeachingEventからリンクを解除する必要があります。私はあなたのコードを持っていないが、TimeTableEntryTeachingEventが互いにどのように関係するかに応じて、それはおそらくのようなものです:

$teachingEvent->setTimeTableEntry(null); 

または

$timeTableEntry->setTeachingEvent(null); 
+0

素晴らしい!時にはそのように簡単です。ありがとう! – Slowwie

関連する問題