교리 캐스케이드 연산 이해
교리 연합에 대한 캐스케이드 작업에 대한 나의 이해를 확인하고 싶습니다. 이 질문의 목적을 위해, 나는 두 가지 모델을 가지고 Customer
와 Insuree
.
a와와 set 사이에 다 대다 관계를 정의하면 다음 Customer
과 같은 효과가 있음을 이해합니다.Insuree
cascade{"all"}
- 고객에게 새 보험을 추가하면이 보험이 유지되고 조인 테이블에 연관이 작성됩니다.
- 컬렉션에서 피보험자를 제거하면 피보험자와 고객이 분리되고 고객과 피보험자가 분리됩니다.
- 고객을 삭제하면 고객과 관련된 모든 보험이 삭제됩니다.
에 대한 연결의 정의입니다 Customers
.
/**
* @ORM\ManyToMany(targetEntity="Insuree", inversedBy="customers", cascade={"all"})
* @ORM\JoinTable(name="customer_insuree",
* joinColumns={@ORM\JoinColumn(name="customer_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="insuree_id", referencedColumnName="id")}
* )
*/
protected $insurees;
Insuree
와 Customer
및 set 사이의 역다 대다 관계를 정의하면 다음 과 cascade{"all"}
같은 의미가 있음을 이해합니다.
- 피보험자에 새 고객을 추가하면이 고객이 유지되고 조인 테이블에 연결이 생성됩니다.
- 컬렉션에서 고객을 제거하면 고객은 보험자에서 분리되고 보험자는 고객에서 분리됩니다.
- 보험자를 삭제하면 관련된 모든 고객이 삭제됩니다.
에 대한 연결의 정의입니다 Insurees
.
/**
* @ORM\ManyToMany(targetEntity="Customer", mappedBy="insurees", cascade={"all"})
*/
protected $customers;
그런 다음 지속, 병합 및 분리에 대한 관계를 정의하면 피보험자를 삭제해도 모든 관련 고객이 삭제되지 않으며 피보험자와 고객 간의 연결 만 제거됩니까?
/**
* @ORM\ManyToMany(targetEntity="Customer", mappedBy="insurees", cascade={"persist", "merge", "detach"})
*/
protected $customers;
유지 및 제거
cascade={"persist"}
엔터티 A를 유지하는 의미 에 대해 정확합니다 . 교리는 컬렉션의 모든 B 엔터티도 유지합니다.
또한 cascade={"remove"}
엔티티 A를 제거하면 Doctrine이 컬렉션의 모든 B 엔티티도 제거한다는 의미에 대해서도 맞습니다 .
하지만 ManyToMany 연관에서 이것을 사용하고 싶지는 않을 것입니다. 왜냐하면이 작업을 모든 B 엔티티에 종속시키는 엔티티 A를 제거하면 해당 B 엔티티가 다른 A 엔티티와 연관 될 수 있기 때문입니다.
분리 및 병합
당신은 하지 에 대한 올바른 cascade={"detach"}
및 cascade={"merge"}
:
추가 / 컬렉션에서 개체를 제거하는 것은 뭔가 당신이 (코드에) 할 필요가있다. 여기에서 그것에 대해 읽어보십시오 .
분리 는 EntityManager에서 엔티티를 분리하는 것을 의미합니다. EntityManager는 더 이상 해당 엔티티를 관리하지 않습니다. 이렇게하면 분리 된 엔터티가 새로 인스턴스화 된 엔터티와 동일하지만 데이터베이스에 이미 있다는 점을 제외하면 EntityManager가이를 인식하지 못하도록합니다.
즉 cascade={"detach"}
, 엔티티 A를 분리하면 Doctrine은 컬렉션의 모든 B 엔티티도 분리합니다.
병합 은 분리 의 반대입니다. 분리 된 엔티티를 EntityManager에 다시 병합합니다.
참고 수행 merge()
실제로 돌아갑니다 새로운 관리 객체를, 당신이 그것을 전달 분리 된 개체가 관리되지 않는 남아있다.
참고 URL : https://stackoverflow.com/questions/24612664/understanding-doctrine-cascade-operations
'code' 카테고리의 다른 글
부트 스트랩 테이블 행 호버 (0) | 2020.11.30 |
---|---|
C에서 구조체 확장 (0) | 2020.11.30 |
Laravel 5 Eloquent where 및 또는 in 절 (0) | 2020.11.30 |
Scala 배열을 Scala vararg 메서드에 전달하는 방법은 무엇입니까? (0) | 2020.11.30 |
HTTP / 2에서 멀티플렉싱의 의미 (0) | 2020.11.30 |