> 백엔드 개발 > PHP 튜토리얼 > Doctrine2의 계단식 삭제: ORM 수준과 데이터베이스 수준 제약 조건?

Doctrine2의 계단식 삭제: ORM 수준과 데이터베이스 수준 제약 조건?

Linda Hamilton
풀어 주다: 2024-11-03 16:55:02
원래의
241명이 탐색했습니다.

Cascade Deletion in Doctrine2: ORM-level vs. Database-level Constraints?

Doctrine2로 관계 설정

Doctrine2는 관계 관리를 위한 두 가지 메커니즘, 즉 계속 삭제데이터베이스를 제공합니다. 레벨 제한 시행. 둘 다 동일한 목적(상위 엔터티가 제거될 때 관련 엔터티 삭제)을 수행하지만 서로 다르게 작동합니다.

ORM 수준 캐스케이드:

ORM 수준 캐스케이드에서는 다음을 사용합니다. 하위 엔터티에 표시된 대로 cascade={"remove"} 주석. 이 옵션은 상위 항목이 삭제될 때 Doctrine2에 하위 항목을 자동으로 제거하도록 지시하지만 Doctrine의 UnitOfWork 컨텍스트 내에서만 가능합니다. 데이터베이스 제약 조건을 생성하지 않습니다.

데이터베이스 수준 제약 조건 적용:

데이터베이스 수준 제약 조건 적용은 외부에 onDelete="CASCADE"를 추가하여 수행됩니다. 키 열의 @ORMJoinColumn 주석. 이는 관련 행이 상위 테이블에서 제거될 때 자동으로 하위 행을 삭제하도록 데이터베이스에 지시합니다. 하위 엔터티에서 이 옵션을 구현하려면 @ORMJoinColumn 주석을 다음과 같이 수정하세요.

<code class="php">@ORM\JoinColumn(name="father_id", referencedColumnName="id", onDelete="CASCADE")</code>
로그인 후 복사

계단식 동작 이해:

계단식 동작에 유의하는 것이 중요합니다. 한 방향으로만 작동합니다. 현재 구성에서는 상위 항목이 삭제되면 하위 항목을 제거하도록 캐스케이드가 설정되어 있습니다(하위 항목에서는 cascade={"remove"}). 그러나 하위 항목을 삭제해도 상위 항목 삭제가 트리거되지는 않습니다. 해당 동작을 원하는 경우 캐스케이드 설정을 반대로 바꾸거나 Father`에서 orphanRemoval=true와 OneToMany 관계를 사용해야 합니다.

이러한 캐스케이드 메커니즘 간의 차이점을 이해함으로써 Doctrine2와 Doctrine2에서 관계를 효과적으로 설정할 수 있습니다. 비즈니스 요구 사항에 따라 관련 데이터가 지속적으로 삭제되는지 확인하세요.

위 내용은 Doctrine2의 계단식 삭제: ORM 수준과 데이터베이스 수준 제약 조건?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿