>데이터 베이스 >MySQL 튜토리얼 >Laravel에서 \'상위 행을 삭제하거나 업데이트할 수 없습니다: 외래 키 제약 조건 실패\' 오류를 해결하는 방법은 무엇입니까?

Laravel에서 \'상위 행을 삭제하거나 업데이트할 수 없습니다: 외래 키 제약 조건 실패\' 오류를 해결하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-25 11:37:02820검색

How to Solve

Laravel 오류: "상위 행을 삭제하거나 업데이트할 수 없습니다: 외래 키 제약 조건이 실패합니다."

Laravel에서 게시물을 삭제하려고 하면 흥미로운 오류가 발생할 수 있습니다. 좋아요가 연결된 항목입니다. 오류 메시지는 다음을 선언합니다.

"SQLSTATE[23000]: 무결성 제약 조건 위반: 1451 상위 행을 삭제하거나 업데이트할 수 없습니다. 외래 키 제약 조건이 실패합니다(eliapi8.likes, CONSTRAINT likes_post_id_foreign FOREIGN KEY(post_id) REFERENCES 게시물( id))"

스키마 분석

스키마를 조사한 결과 likes 테이블의 post_id 필드에 외래 키 제약 조건이 존재한다는 것이 분명해졌습니다. 이 제약 조건은 연관된 유사 레코드가 있는 경우 게시물 레코드가 삭제되는 것을 방지합니다.

제안 솔루션

해결책 1: onDelete('cascade') 활용

likes 테이블의 마이그레이션 파일에 onDelete('cascade')를 도입하면 해결 방법이 제공됩니다. 이 지시문을 사용하면 게시물 레코드가 삭제될 때 해당하는 유사 레코드가 모두 자동으로 제거됩니다.

Schema::create('likes', function (Blueprint $table) {
    $table->integer('post_id')->unsigned();
    $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
});

해결책 2: 모델 관계 활용

게시물이 모델은 Like 모델과 관계를 유지하므로 다음 접근 방식을 사용할 수 있습니다.

  1. $post->likes()->get()을 사용하여 관련 좋아요를 가져옵니다.
  2. $post->likes()->delete()를 사용하여 검색된 좋아요를 삭제합니다.
  3. 마지막으로 $post->delete()를 사용하여 게시물 자체를 삭제합니다.

이러한 해결 방법 중 하나를 채택하면 문제가 있는 오류가 해결되어 좋아요 상태에 관계없이 게시물을 삭제할 수 있습니다.

위 내용은 Laravel에서 '상위 행을 삭제하거나 업데이트할 수 없습니다: 외래 키 제약 조건 실패' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.