1
resposta

[Dúvida] "SQLITE_CONSTRAINT: FOREIGN KEY constraint failed"

Gostaria de saber como usar o metodo "delete" em casos em que as tabelas estão interligadas, porque conforme o que foi ensinado no curso, não é o suficiente, creio que seja por as tabelas estarem unidas de certa forma e o sqlite nao deixa eu excluir um elemento facilmente.

1 resposta

Oi, Juan! Tudo bem?

O erro "SQLITE_CONSTRAINT: FOREIGN KEY constraint failed" geralmente acontece quando tentamos deletar um registro que é referenciado por uma chave estrangeira em outra tabela, o que viola a integridade referencial. Para resolver isso, podemos tentar algumas abordagens:

  1. Cascade Delete: se for apropriado para o seu caso de uso, você pode configurar a sua tabela para deletar automaticamente os registros relacionados quando um registro pai é deletado. No Sequelize, isso pode ser feito configurando a opção onDelete: 'CASCADE' quando você define a associação entre os modelos, por exemplo:

    Parent.hasMany(Child, { onDelete: 'CASCADE' });
    Child.belongsTo(Parent);
    

    Com essa configuração, ao deletar um registro da tabela Parent, todos os registros relacionados na tabela Child serão automaticamente deletados.

  2. Deletar manualmente os registros relacionados: antes de deletar o registro principal, você pode deletar manualmente todos os registros que referenciam esse registro, por exemplo:

    // Primeiro, delete os registros filhos
    await Child.destroy({ where: { parentId: idDoRegistroPai } });
    
    // Depois, delete o registro pai
    await Parent.destroy({ where: { id: idDoRegistroPai } });
    
  3. Desabilitar temporariamente a checagem de chave estrangeira: essa não é uma prática recomendada para produção, mas pode ser útil em um ambiente de desenvolvimento ou para resolver problemas pontuais. Você pode desabilitar temporariamente a checagem de chave estrangeira no SQLite executando o comando:

    PRAGMA foreign_keys = OFF;
    

    Lembre-se de habilitar novamente após a operação:

    PRAGMA foreign_keys = ON;
    

Espero ter ajudado!

Um forte abraço e bons estudos!