>  기사  >  백엔드 개발  >  Doctrine2는 ON DELETE CASCADE를 사용하여 계단식 동작을 어떻게 처리합니까?

Doctrine2는 ON DELETE CASCADE를 사용하여 계단식 동작을 어떻게 처리합니까?

DDD
DDD원래의
2024-11-02 08:28:02758검색

How Does Doctrine2 Handle Cascade Behavior with ON DELETE CASCADE?

Doctrine2를 사용한 삭제 캐스케이드 이해

Doctrine2는 관련 엔터티와 작업할 때 캐스케이드 동작을 구성할 수 있는 유연성을 제공합니다. 그러나 일반적인 오해는 엔터티 연결에서 cascade={"remove"}를 설정하면 데이터베이스의 외래 키 열에 ON DELETE CASCADE 옵션이 자동으로 추가된다는 것입니다.

Doctrine2에는 두 가지 고유한 유형이 있습니다. 계단식:

1. ORM 수준 캐스케이드:

  • 엔티티 연결에서 cascade={"remove"}를 사용합니다.
  • 작업 단위(UoW)에서 수행되는 계산.
  • 관련 객체를 반복하고 상위 객체가 제거되면 제거합니다.

2. 데이터베이스 수준 계단식:

  • 엔티티 연결의 조인 열에 onDelete="CASCADE"를 사용합니다.
  • 외부 키 열에 ON DELETE CASCADE 옵션을 생성합니다.

질문에 제공된 예에서는 ORM 수준 캐스케이드를 사용합니다. 상위 항목을 삭제할 때 연결된 하위 개체를 올바르게 제거하지만 데이터베이스에 ON DELETE CASCADE 옵션을 생성하지는 않습니다. 이를 달성하려면 다음 수정이 필요합니다.

<code class="php">/**
 * @ORM\ManyToOne(targetEntity="Father", cascade={"remove"})
 *
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="father_id", referencedColumnName="id", onDelete="CASCADE")
 * })
 *
 * @var Father
 */
private $father;</code>

예제와 같이 ORM 수준 캐스케이드를 사용하면 하위 개체가 제거될 때 상위 개체도 제거된다는 점에 유의하는 것이 중요합니다. 이는 의도한 동작이 아닐 가능성이 높습니다.

위 내용은 Doctrine2는 ON DELETE CASCADE를 사용하여 계단식 동작을 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.