Doctrine2: 삭제 계단식 이해
원활한 데이터베이스 유지 관리를 위해 해당 상위 레코드가 삭제될 때 하위 레코드를 자동으로 삭제해야 하는 경우가 많습니다. . Doctrine2는 상위 레코드가 삭제될 때 하위 레코드가 제거되도록 보장하는 기능인 "On Delete Cascade"를 통해 이 기능을 지원합니다.
엔터티 예시
다음 엔터티를 고려하세요.
<code class="php">class Child { /** @ORM\ManyToOne(targetEntity="Father", cascade={"remove"}) */ private $father; } class Father { /** @ORM\Id @ORM\GeneratedValue */ private $id; }</code>
문제: 데이터베이스 캐스케이드 누락
코드는 "제거" 캐스케이드를 사용하여 자녀와 아버지 간의 관계를 설정하지만 데이터베이스에는 "삭제 시"가 없습니다. Cascade" 제약 조건.
솔루션: 데이터베이스 수준 계단식
참된 On 삭제 계단식을 구현하려면 하위 조인 열에 onDelete="CASCADE"를 추가하세요.
<code class="php">/** @ORM\JoinColumn(name="father_id", referencedColumnName="id", onDelete="CASCADE") */</code>
Father 테이블에서 행이 삭제되면 Child 테이블에서 일치하는 모든 행이 자동으로 삭제되도록 지정합니다.
주의: 캐스케이드 이해
ORM 수준과 데이터베이스 수준 캐스케이드의 차이점을 알아두는 것이 중요합니다. ORM 수준 캐스케이드는 Doctrine의 UnitOfWork 내에서 작동하며 데이터베이스 구조에 영향을 주지 않는 반면, 데이터베이스 수준 캐스케이드는 데이터베이스에 물리적 제약을 생성합니다. 현재 예에서 cascade={"remove"}는 UnitOfWork에서 재귀적 삭제를 트리거하는 ORM 수준 계단식이지만 원하는 데이터베이스 동작이 발생하지는 않습니다.
위 내용은 Doctrine2: 원활한 데이터베이스 유지 관리를 위해 On Delete Cascade를 어떻게 구현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!