반응형
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() 설정은 꼭 확인해 주세요!
반응형
'IT & 개발 > laravel' 카테고리의 다른 글
Laravel Sail + Nginx 리버스 프록시 환경에서 Mixed Content 오류 해결기 (0) | 2025.05.07 |
---|---|
Laravel에서 Custom Role Middleware 만들기 (0) | 2025.02.10 |
Laravel에서 increment() 메서드 사용 시 즉시 업데이트되지 않는 문제 해결하기 (0) | 2024.12.02 |
Laravel에서 데이터 정렬하기: orderBy 메소드 활용하기 (2) | 2024.11.25 |
라라벨에서 커스텀 helper 등록하기 (3) | 2024.10.07 |