Erro de chave estrangeira ao tentar excluir uma linha filha

Adoc

Sei que há muitos tópicos com esse tópico e li muitos deles, mas ainda não entendo como resolver meu problema.

Tenho 3 tabelas representadas pelas seguintes classes de entidades:

Inscrição:

     /**
     * @ORM\Entity(repositoryClass=ApplicationRepository::class)
     */
    class Application
    {
        /**
         * @ORM\Id
         * @ORM\GeneratedValue
         * @ORM\Column(type="integer")
         */
        private $id;
    
        /**
         * @ORM\Column(type="string", length=32, unique=true)
         */
        private $name;

        ...
    }

Do utilizador

    /**
     * @ORM\Entity(repositoryClass=UserRepository::class)
     */
    class User
    {
        /**
         * @ORM\Id
         * @ORM\GeneratedValue
         * @ORM\Column(type="integer")
         */
        private $id;
    
        /**
         * @ORM\OneToOne(targetEntity=Application::class, cascade={"persist"}, fetch="EXTRA_LAZY")
         * @ORM\JoinColumn(nullable=false)
         */
        private $application;

        ...
    }

UserToken

    /**
     * @ORM\Entity(repositoryClass=UserTokenRepository::class)
     */
    class UserToken
    {
        /**
         * @ORM\Id
         * @ORM\GeneratedValue
         * @ORM\Column(type="integer")
         */
        private $id;
    
        /**
         * @ORM\ManyToOne(targetEntity=User::class, inversedBy="userTokens", cascade={"persist"}, fetch="EXTRA_LAZY")
         * @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
         */
        private $user;
    
        /**
         * @ORM\OneToOne(targetEntity=Application::class, cascade={"persist"}, fetch="EXTRA_LAZY")
         * @ORM\JoinColumn(nullable=false)
         */
        private $application;

        ...
    }

Quando um usuário fecha a sessão (logout) eu quero excluir a linha na tabela UserToken, mas sem remover o usuário na tabela User e o aplicativo na tabela Application, o problema é que sempre diz:

SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (db`.`user`, CONSTRAINT `FK_8D93D649C6798DB` FOREIGN KEY (`application_id`) REFERENCES `application` (`id`))"

Eu removo a linha do UserToken da seguinte forma:

$em = $this->getDoctrine()->getManager();
$em->remove($userToken);
$em->flush();

Eu tentei muitas coisas, eu sei que cascade = {"persist"} está no nível php e onDelete está no nível do banco de dados. E também entendo o problema, mas não sei como resolver.

O que eu posso fazer? Muito obrigado.

Informação importante:

Versão Symfony: 5.2.0

Versão do Doctrine: 2.7.1-DEV

Mysql: 10.1.40-MariaDB

Editar:

Desculpe, esta é a saída (importante) de show create table:

Usuário :

 UNIQUE KEY `UNIQ_8D93D6493E030ACD` (`application_id`),
 CONSTRAINT `FK_8D93D649C6798DB` FOREIGN KEY (`application_id`) REFERENCES `application` (`id`)

UserToken :

UNIQUE KEY `UNIQ_BDF55A633E030ACD` (`application_id`),
 KEY `IDX_BDF55A63A76ED395` (`user_id`),
 CONSTRAINT `FK_BDF55A633E030ACD` FOREIGN KEY (`application_id`) REFERENCES `application` (`id`),
 CONSTRAINT `FK_BDF55A63A76ED395` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
)

E o ENGINE = InnoDB

Adoc

Se outra pessoa tiver esse problema, eu consegui corrigi-lo.

Em primeiro lugar, a relação entre as tabelas está errada.

Nas tabelas User e UserToken , deve ser:

    /**
     * @ORM\ManyToOne(targetEntity=Application::class, fetch="EXTRA_LAZY")
     * @ORM\JoinColumn(nullable=false)
     */
    private $application;

Em segundo lugar, limpei o cache de doutrina:

php bin/console doctrine:cache:clear-metadata
php bin/console doctrine:cache:clear-query
php bin/console doctrine:cache:clear-result

Depois disso, tentei atualizar meu esquema (ou criar uma nova migração), mas o symfony sempre diz que nenhuma alteração foi detectada. Então eu removo o esquema, recrio-o e valido, mas nada mudou.

Em ambiente DEV

php bin/console doctrine:schema:drop
php bin/console doctrine:schema:create
php bin/console doctrine:schema:validate

Para efetivar as mudanças (no meu caso) o mais importante era executar o comando :

php bin/console cache:clear

Depois disso, o symfony aceitou minhas alterações e fui capaz de atualizar o esquema com uma migração perfeitamente.

Agora posso remover um UserToken sem remover o usuário e o aplicativo associados.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

mySQL: Erro ao tentar criar uma chave estrangeira

Erro (1005) ao tentar criar uma chave estrangeira

Erro de aumento ao tentar deletar uma chave estrangeira protegida no Django

Erro de restrição de chave estrangeira ao excluir registro

Erro de incompatibilidade de chave estrangeira em sqlite ao tentar usar rowid como chave estrangeira

Erro ao tentar excluir uma linha da tabela (javascript)

Django Erro de restrição de chave estrangeira ao enviar uma linha

Laravel5: QueryException ao escrever dados na tabela de banco de dados relacionada. Erro: "Não é possível adicionar ou atualizar uma linha filha: uma restrição de chave estrangeira falha"

Código de erro: 1452. Não é possível adicionar ou atualizar uma linha filha: uma restrição de chave estrangeira falha - MYSQL

MySQL Workbench: Código de erro 1452. Não é possível adicionar ou atualizar uma linha filha: uma restrição de chave estrangeira falha

Como resolver o número do erro: 1452 - Não é possível adicionar ou atualizar uma linha filha: uma restrição de chave estrangeira falha

MySQL Workbench. ERRO 1452: Não é possível adicionar ou atualizar uma linha filha: uma restrição de chave estrangeira falha. Operação falhou

Não é possível adicionar ou atualizar uma linha filha: uma restrição de chave estrangeira falha ao fazer INSERT em um foreach

Não é possível adicionar ou atualizar uma linha filha: uma restrição de chave estrangeira falha ao fazer INSERT em um foreach

Não é possível excluir ou atualizar uma linha pai: uma restrição de chave estrangeira falha ao excluir uma entidade com referência

Erro de mapeamento em SQLAlchemy ao usar uma chave estrangeira

Erro geral 1215 ao tentar fazer uma chave estrangeira dentro da mesma tabela, inteiro para inteiro

Obtendo o erro 1822 no MySQL ao tentar criar uma chave estrangeira

Migration:refresh está lançando um erro ao tentar adicionar uma chave estrangeira

Erro de sintaxe SQL 1064 ao tentar criar uma restrição de chave estrangeira em uma consulta de criação de tabela

Erro ao tentar criar chave estrangeira para tabela no SQL?

Onde está meu erro? Não é possível excluir ou atualizar uma linha pai: uma restrição de chave estrangeira falha

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

Não é possível adicionar ou atualizar uma linha filha: uma restrição de chave estrangeira falha

# 1452 - Não é possível adicionar ou atualizar uma linha filha: uma restrição de chave estrangeira falha

OneToMany: Não é possível adicionar ou atualizar uma linha filha: uma restrição de chave estrangeira falha

Hibernar Não é possível adicionar ou atualizar uma linha filha: uma restrição de chave estrangeira falha

Como posso selecionar todas as linhas pai com uma linha filha de chave estrangeira anterior a uma determinada data?

Não é possível adicionar ou atualizar uma linha filha; uma restrição de chave estrangeira falha

TOP lista

  1. 1

    Obtendo apenas o número de uma String C #

  2. 2

    como acessar a conexão do banco de dados em visualizações no codeigniter 4

  3. 3

    Como redimensionar tabelas geradas pelo Stargazer no R Markdown?

  4. 4

    recuperar valores em uma linha de dataframes com base no valor em outro

  5. 5

    Firebase Storage Web: como fazer upload de um arquivo

  6. 6

    为什么在使用argc和argv时不会出现分段错误?

  7. 7

    Como agrupar objetos em uma lista em outras listas por atributo usando streams e Java 8?

  8. 8

    Qual é a diferença entre o tamanho do passo e a taxa de aprendizado no aprendizado de máquina?

  9. 9

    Por que definir a variável como uma string vazia não é necessária em meu código?

  10. 10

    Insert a value to hidden input Laravel Blade

  11. 11

    Configure o coletor de arquivos Serilog para usar um arquivo de log por execução do aplicativo

  12. 12

    Como ler arquivos yaml em laravel?

  13. 13

    Série Fibonacci usando programação dinâmica

  14. 14

    Como adicionar elementos a um array multidimensional em PHP?

  15. 15

    How do I set an IronPython ctypes c_char_p pointer to an absolute address that is not a valid memory address to read from?

  16. 16

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  17. 17

    Como faço para que um formulário no Access se torne uma janela pop-up?

  18. 18

    Como anexar um arquivo a um e-mail usando JavaMail

  19. 19

    Adicionar campos de texto dinâmicos por meio da seleção suspensa de componentes?

  20. 20

    如何使用SOM算法进行分类预测

  21. 21

    TypeError não capturado: não é possível atribuir a propriedade somente leitura

quentelabel

Arquivo