"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Laravel에서 \"상위 행을 삭제하거나 업데이트할 수 없습니다: 외래 키 제약 조건 실패\" 오류를 해결하는 방법은 무엇입니까?

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

2024년 11월 10일에 게시됨
검색:374

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: 모델 관계 활용

게시물 모델이 좋아요 모델과 관계를 유지하는 경우 다음 접근 방식을 사용할 수 있습니다.

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

둘 중 하나를 채택하여 이러한 솔루션을 사용하면 문제가 있는 오류를 해결할 수 있어 상태에 관계없이 게시물을 삭제할 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3