Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Não consigo excluir 3 campos da minha Categoria, inclusive direto no BD

Foi criado no início via BD algumas categorias ( Cat Filmes, Categoria Jogos e Categoria Livros), porém ao tentar excluir direto no sistema acontece um erro:

PDOException Object
(
    [mensagem: protected] => 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 (`estoque``produtos`, CONSTRAINT` fk_categorias` FOREIGN KEY (`categoria_id`) REFERÊNCIAS `categorias` (` id`))
    [string: exceção: privada] => 
    [código: protegido] => 23000
    [arquivo: protected] => E: \ PHP PDO \ classes \ Categoria.php
    [linha: protegida] => 69
    [trace: Exception: private] => Matriz
        (
            [0] => Matriz
                (
                    [arquivo] => E: \ PHP PDO \ classes \ Categoria.php
                    [linha] => 69
                    [função] => executar
                    [aula] => PDOStatement
                    [type] => ->
                    [args] => Matriz
                        (
                        )

                )

            [1] => Matriz
                (
                    [arquivo] => E: \ PHP PDO \ categorias-excluir-post.php
                    [linha] => 10
                    [função] => excluir
                    [class] => Categoria
                    [type] => ->
                    [args] => Matriz
                        (
                        )

                )

        )

    [anterior: exceção: privada] => 
    [errorInfo] => Matriz
        (
            [0] => 23000
            [1] => 1451
            [2] => Não é possível excluir ou atualizar uma linha pai: uma restrição de chave estrangeira falha (`estoque``produtos`, CONSTRAINT` fk_categorias` FOREIGN KEY (`categoria_id`) REFERÊNCIAS` categorias` (`id`))
        )

)

Mesmo eu indo direto no banco , eu tb não consigo... Parece que é uma restrição com a chave estrangeira. Como resolvo esse problema?

Estou passando meu Github: https://github.com/flavio-magela/PHP-PDO Obrigado pela ajuda.

2 respostas

Oi Flávio, tudo bom?

Isso acontece porque existe uma dependência entre as tabelas produtos e categoria. Se você remover todos os produtos com a categoria que você quer excluir, você remove essa dependência e consegue excluir a categoria.

Uma outra abordagem é configurar essa funcionalidade de remoção em cascata pra acontecer automaticamente quando você excluir uma categoria. Ou seja, você pode configurar cascade delete nesse relacionamento =)

Esse é um dos motivos pra gente nunca excluir definitivamente um dado da base. Mas, sim, marcar o dado como excluido em uma coluna. Esse procedimento é chamado de soft delete.

Abraço!

solução!

Para excluir um registro que tem chave primária de algum relacionamento, faz-se necessário excluir primeiro o registro que tem a chave estrangeira.

Ou seja, se pretendo excluir um PRODUTO preciso antes excluir os registros que dependem deste produto (ou tem relacionamento com o registro do produto que será excluído).

Então, você não pode excluir uma CATEGORIA que tem produtos relacionados com ela. Primeiro, você precisa excluir o produto.