Skip to content

La mise à jour du schéma Symfony2 Doctrine échoue

Solution:

@maxien

La réponse de Michael Villeneuve n’est pas tout à fait juste. Dans le cas d’un environnement de production ou de type , vous ne pouvez tout simplement pas supprimer le schéma et le recréer.

La seule façon de l’exécuter sur votre schéma actuel est de procéder comme suit :

  1. php app/console doctrine:schema:update –dump-sql . Copiez la sortie. Ce sont les requêtes SQL directes pour mettre à jour votre schéma
  2. connectez mysql avec la ligne de commande mysql ou via un client mysql
  3. Désactivez la vérification des clés étrangères en appelant cette requête : “set foreign_key_checks=0;”
  4. mettre les requêtes de doctrine:schema:update
  5. Activez la vérification de la clé étrangère avec : “set foreign_key_checks=1;”

Je ne peux pas garantir que vous ne perdrez pas certaines clés, mais vous ne supprimez pas du tout vos données.

Votre problème est que vous souhaitez modifier une table avec une contrainte existante. Je vois deux solutions :

Si vous êtes en développement, vous pouvez reconstruire votre base de données

doctrine:database:drop --force
doctrine:database:create
doctrine:schema:create

Si vous êtes en production, c’est un peu plus compliqué.

Une solution que je vois est que vous pouvez créer une commande pour enregistrer vos données, supprimer les données dans les tables que vous souhaitez modifier, modifier votre schéma, recharger les données une fois que votre table est modifiée. Selon les changements, cela ne devrait pas prendre plus de 2-3 heures. Assurez-vous simplement d’avoir une sauvegarde au cas où votre commande se dirigerait vers le sud.

Mise à jour du schéma avec les contrôles de clé étrangère désactivés

Si les mises à jour du schéma Doctrine échouent en raison de contraintes de clé étrangère, vous devez simplement désactiver les vérifications de clé étrangère pour cette mise à jour particulière.

En tant que monoligne, vous pouvez exécuter :

mysql -e "set foreign_key_checks = 0; `app/console doctrine:schema:update --dump-sql`"

Cela précède set foreign_key_checks = 0; à la sortie de app/console doctrine:schema:update --dump-sql il appelle donc exactement ce que Doctrine appellerait mais avec les vérifications de clé étrangère désactivées. Configurer le mysql appel à vos besoins.

Votre schéma est mis à jour et en fonction de vos modifications, aucune donnée n’est perdue.

Garde en tête que parfois l’ordre des requêtes est important et la Doctrine ne les a tout simplement pas ordonnés correctement. Dans ce cas, vous devez trier les requêtes correctement par vous-même, puis utiliser cette liste de requêtes ordonnée à la place.



Articles Similaires

exemple de code cdn bootrarp

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.