SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'topo_id'

php bin/console doctrine:migrations:migrate

a marqué ce sujet comme résolu.

Bonjour, dans mon projet en symfony, après avoir ajouté la propriété média à mon entité topo en relation ManyToOne à l’entité Topo, j’ai fais les migrations et pour

php bin/console doctrine:migrations:migrate

j’ai eu :

An exception occurred while executing 'ALTER TABLE media ADD topo_id INT NOT NULL':  

  SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'topo_id'

Quelqu’un m’a sugérer de faire:

php bin/console doctrine:query:sql "ALTER TABLE media DROP topo_id"
php bin/console d:m:m

Mais j’ai :

SQLSTATE[HY000]: General error: 1553 Cannot drop index 'IDX_6A2CA10C7F7E8D71': needed in a foreign key co  
  nstraint

D’après ce que j’ai compris il faut également supprimer la clé étrangère et la remettre après ce que j e n’ai jamais fait auparavant. Je ne sais si ca risque de péter tout mon site? Sur le stackoverflow ils disent de faire

ALTER TABLE mytable DROP FOREIGN KEY mytable_ibfk_1 ; donc de faire
ALTER TABLE media DROP FOREIGN KEY topo_ibfk_1

puis de la remettre après avec :

ALTER TABLE media ADD CONSTRAINT media_ibfk_1 FOREIGN KEY (AID) REFERENCES media_a (ID) ON DELETE CASCADE

ou quelque chose comme ca. Ou bien, selon une autre methode, il fautdait faire comme suit

ALTER TABLE nom_table.
ADD [CONSTRAINT fk_col_ref] -- On donne un nom à la clé (facultatif)
FOREIGN KEY colonne -- La colonne sur laquelle on ajoute la clé
REFERENCES table_ref(col_ref); -- La table et la colonne de référence.

Si je comprends bien dans media j’ai 2 clés secondaires ou étrangères topo_id et site_id d’ailleur et il faut que je supprime et remette celle qui me gène, topo_id. Mais j’ai peur que ca casse mon site… non? Qu’en pensez-vous? Merci.

+0 -0

Salut

Est-ce que tu pourrais nous montrer les mappings des deux entités Media et Topo ? Parce que tu ne devrais pas avoir à réfléchir en SQL, et donc il pourrait bien y avoir un souci.

Edit

Si jamais, je te recommande d’ajouter les tags symfony et symfony 4.4 (ou la version que tu utilises, pas besoin des trois nombres — et tu n’es pas obligé d’utiliser uniquement les tags existant) et d’enlever php mysql. Au pire, ce serait plutôt doctrine qu’il faudrait à la place de ce dernier tag.

+1 -0

Ah oui, effectivement, après chaque migration créée, il faut l’appliquer sinon la migration suivante comprendra la précédente. Parce que les migrations ne se basent que sur l’état des entités et de la base de données, et non sur ce que contiennent les classes de migration à disposition.

Cela aurait été bien que tu effectues les manipulations sur les tags  ;)

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte