본문 바로가기

IT & 개발/laravel

Laravel 외래 키 삭제 처리 – onDelete() 옵션 정리

반응형

Laravel에서 테이블 간 외래 키(foreign key)를 설정할 때, 부모 테이블의 데이터가 삭제되면 자식 테이블에 어떤 영향을 줄지 설정할 수 있습니다. 이때 사용하는 메서드가 바로 onDelete()입니다.

이 글에서는 Laravel 마이그레이션에서 외래 키 삭제 동작을 제어하는 방법을 간단히 소개합니다.


🧨 기본 예시

php
복사편집
$table->foreignIdFor(ProductGroup::class) ->nullable() ->constrained() ->onDelete('set null');

위 코드는 다음을 의미합니다:

  • product_group_id 컬럼은 product_groups 테이블의 id를 참조합니다.
  • 부모 데이터가 삭제되면 외래 키 값을 null로 변경합니다.

⚙️ onDelete 옵션 종류

옵션설명
onDelete('cascade') 부모 데이터 삭제 시 자식 데이터도 함께 삭제됨
onDelete('set null') 부모 데이터 삭제 시 외래 키 컬럼을 null로 설정 (※ nullable() 필요)
onDelete('restrict') / onDelete('no action') 부모 데이터 삭제를 막음. 삭제 시 오류 발생 (기본값)
 

✅ 실무 팁

  • 외래 키 컬럼을 nullable()로 설정하지 않으면 set null은 작동하지 않습니다.
  • 데이터를 보존하고 싶다면 set null을, 완전히 연동 삭제하려면 cascade를 사용하세요.
  • **의도치 않은 삭제를 방지하려면 restrict 또는 기본 동작(no action)**이 더 안전할 수 있습니다.

✍️ 예시: 연결 무시하고 삭제 허용

php
복사편집
$table->foreignIdFor(ProductGroup::class) ->nullable() ->constrained() ->onDelete('set null');

ProductGroup이 삭제되더라도, 이 외래 키 컬럼은 null이 되며 현재 테이블의 데이터는 유지됩니다.


Laravel에서 데이터 삭제 시 오류 없이 유연하게 처리하고 싶다면, onDelete() 설정은 꼭 확인해 주세요!

반응형