2012-01-13 2 views
41

오류

상위 행을 삭제하거나 업데이트 할 수 없습니다. 외래 키 제약 조건이 실패합니다.Doctrine 2 OneToMany 계단식 SET NULL

클래스
class Teacher { 

    /** 
    *@ORM\OneToMany(targetEntity="publication", mappedBy="teacher") 
    */ 
    protected $publications; 
} 

class Publication { 

    /** 
    * @ORM\ManyToOne(targetEntity="Teacher", inversedBy="publications") 
    * @ORM\JoinColumn(name="teacher_id", referencedColumnName="id") 
    */ 
    protected $teacher; 
} 

나는

내가 원하는 것은 당신이 교사를 삭제하면 id_teacher NULL로 변경되는 것을 그것을 확인하는 것입니다를 원한다. 나는 출판물을 지키고 싶지만 교수에 대해서는 언급하지 않고있다.

Doctrine에서 어떻게 그럴 수 있는지 모르겠습니다. 가능합니까? 아니면 언제나 관계는 선생님과해야합니까?

답변

127

이 같은 엔터티 출판 주석의 옵션 onDelete="SET NULL"을 추가해야합니다 :

class Publication 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="Teacher", inversedBy="publications") 
    * @ORM\JoinColumn(name="teacher_id", referencedColumnName="id", onDelete="SET NULL") 
    */ 
    protected $teacher; 
} 

건배!

+13

2012 년 중반에 응답했지만 여전히 나에게 도움이되었습니다. 감사! –

+11

데이터베이스 스키마를 추가 한 후에 데이터베이스 스키마를 업데이트해야합니다. – priktop