Laravel에서 \'상위 행을 삭제하거나 업데이트할 수 없습니다\' 오류를 수정하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-10-25 06:53:02
원래의
229명이 탐색했습니다.

How to Fix the

Laravel에서 "상위 행을 삭제하거나 업데이트할 수 없습니다" 오류 해결

좋아요가 연결된 게시물을 삭제할 때 다음과 같은 문제가 발생합니다. 오류:

SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails
로그인 후 복사

이 오류는 외래 키 제약 조건과 관련된 스키마 문제를 나타냅니다.

문제 분석

likes 테이블에 외래 키가 있습니다. post 테이블의 id 열을 참조하는 post_id에 대한 제약 조건입니다. 연결된 좋아요를 먼저 삭제하지 않고 게시물을 삭제하려고 하면 likes.post_id에 대한 외래 키 제약 조건으로 인해 작업이 방지됩니다.

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

문제를 해결하려면 좋아요 마이그레이션 파일의 likes.post_id 외래 키에 대한 onDelete 작업을 구성할 수 있습니다.

<code class="php">Schema::create('likes', function (Blueprint $table) {
    $table->integer('post_id')->unsigned();
    $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
});</code>
로그인 후 복사

이 구성을 사용하면 게시물이 삭제되면 관련된 모든 좋아요가 외래 키 위반 문제가 해결되면 자동으로 삭제됩니다.

해결책 2: 명시적으로 좋아요 삭제

또는 게시물을 삭제하기 전에 게시물과 관련된 좋아요를 명시적으로 삭제할 수도 있습니다. 게시물 자체. 이 접근 방식을 사용하려면 PostController.php에 다음 줄을 추가해야 합니다.

<code class="php">$post->likes()->delete();
$post->delete();</code>
로그인 후 복사
로그인 후 복사

관계 기반 솔루션

모델 간에 관계가 구성된 경우 다음을 수행할 수 있습니다. 단일 작업으로 게시물과 관련 좋아요를 모두 삭제하려면 다음 접근 방식을 사용하세요.

<code class="php">$post->likes()->delete();
$post->delete();</code>
로그인 후 복사
로그인 후 복사

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!