code

교리 캐스케이드 연산 이해

codestyles 2020. 11. 30. 08:18
반응형

교리 캐스케이드 연산 이해


교리 연합에 대한 캐스케이드 작업에 대한 나의 이해를 확인하고 싶습니다. 이 질문의 목적을 위해, 나는 두 가지 모델을 가지고 CustomerInsuree.

a와와 set 사이에 다 대다 관계를 정의하면 다음 Customer같은 효과가 있음을 이해합니다.Insureecascade{"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;

InsureeCustomer및 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

반응형