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 중국어 웹사이트의 기타 관련 기사를 참조하세요!