부모 엔티티가 삭제되면 자동으로 자식 엔티티를 삭제하는 방법에 대한 정보를 거의 수집하지 않았습니다. 가장 일반적인 방법은 cascade = { "remove"} OR orphanRemoval = true OR ondelete = "CASCADE" 세 가지 주석 중 하나를 사용하는 것 같습니다 .
나는 : 세 번째에 대한 약간의 혼동 ondelete = "CASCADE" 이 일이 매우 부족한 대해 교리 공식 문서에서 설명으로) 누군가 할 수 있다면 나는 사랑을 나에게 다음과 같은 정보 확인 I 수집을하고 내 연구에서 이해 그물과 경험 ...
그것이하는 일
cascade = { "remove"}
==> 소유 측 엔티티가 있으면 반대 측 엔티티가 삭제됩니다. 당신이 다른 소유 측 엔티티와 많은 토 머니에 있더라도.
-컬렉션에 사용되어야 함 (OneToMany 또는 ManyToMany 관계에서)-ORM
에서 구현
orphanRemoval = true
==> 소유 측 엔티티가이고 다른 소유 측 엔티티에 더 이상 연결되지 않은 경우 반대 측의 엔티티가 삭제됩니다. (참조 doctrine official_doc
-ORM에서 구현
-OneToOne, OnetoMany 또는 ManyToMany와 함께 사용할 수 있음)
onDelete = "CASCADE"
==> 이것은 데이터베이스의 외래 키 열에 On Delete Cascade를 추가합니다
.-이 전략은 약간 까다 롭지 만 매우 강력하고 빠를 수 있습니다. (참조 doctrine official_doc ... 그러나 더 많은 설명을 읽지 않음)
-ORM은 이전의 두 가지 방법에 비해 작업이 적으므로 성능이 향상되어야합니다.
기타 정보
-이 세 가지 방법은 모두 양방향 관계 엔티티에서 구현됩니다 ( right ??? )
-cascade = { "remove"}를 사용하면 모든 외래 키 onDelete = CASCADE를 완전히 우회합니다. (참조 doctrine_official_doc )
코드에서 사용하는 방법에 대한 예
- orphanRemoval 및 cascade = { "remove"}는 반전 된 엔티티 클래스에 정의됩니다.
- ondelete = "CASCADE"는 소유자 엔티티에 정의됩니다.
- @ORM \ JoinColumn (onDelete = "CASCADE")를 작성하고 doctrine이 열 이름을 처리하도록 할 수도 있습니다.
cascade = { "제거"}
/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact", cascade={"remove"})
*/
protected $Phonenumbers
orphanRemoval = true
/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact", orphanRemoval=true)
*/
protected $Phonenumbers
onDelete = "CASCADE"
/**
* @ManyToOne(targetEntity="Contact", inversedBy="phonenumbers")
* @JoinColumn(name="contact_id", referencedColumnName="contact_id", onDelete="CASCADE")
*/
protected $contact;