"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como resolver o erro "Não é possível excluir ou atualizar uma linha pai: falha na restrição de chave estrangeira" no Laravel?

Como resolver o erro "Não é possível excluir ou atualizar uma linha pai: falha na restrição de chave estrangeira" no Laravel?

Publicado em 2024-11-10
Navegar:515

How to Solve \

Erro do Laravel: "Não é possível excluir ou atualizar uma linha pai: uma restrição de chave estrangeira falha"

No Laravel, um erro intrigante pode surgir ao tentar excluir uma postagem que tem curtidas associadas. A mensagem de erro proclama:

"SQLSTATE[23000]: Violação de restrição de integridade: 1451 Não é possível excluir ou atualizar uma linha pai: uma restrição de chave estrangeira falha (eliapi8.likes, CONSTRAINT likes_post_id_foreign FOREIGN KEY (post_id) REFERENCES posts ( id))"

Analisando o esquema

Ao examinar o esquema, torna-se evidente que existe uma restrição de chave estrangeira no campo post_id da tabela de curtidas. Essa restrição impede a exclusão de um registro de postagem se houver algum registro semelhante associado.

Soluções propostas

Solução 1: Utilize onDelete('cascade')

A introdução de onDelete('cascade') no arquivo de migração da tabela de curtidas fornece uma solução. Ao usar esta diretiva, quando um registro de postagem é excluído, todos os registros semelhantes correspondentes são automaticamente removidos:

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

Solução 2: Alavancar relacionamentos do modelo

Se o modelo Post mantém um relacionamento com o modelo Like, a seguinte abordagem pode ser empregada:

  1. Busque as curtidas associadas usando $post->likes()->get().
  2. Exclua as curtidas recuperadas usando $post->likes()->delete().
  3. Finalmente, exclua a postagem usando $post->delete().

Ao adotar qualquer uma dessas soluções, o erro problemático pode ser resolvido, permitindo que as postagens sejam excluídas independentemente de sua preferência status.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3