IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Modifier une base de données en prod [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2004
    Messages : 21
    Par défaut Modifier une base de données en prod
    Bonjour,

    Voilà 2 mois que je travaille sur un gros site basé sur symfony. Tout se passe bien et j'adore ce framework. Mais il reste une question auquelle je ne trouve nulle part de réponse satisfaisante.

    Lorsque mon appli sera en production et que la base de données sera peuplée par ce que les utilisateurs y mettront, comment pourrai-je modifier la structure des tables de manière simple ? Par exemple, rajouter des champs, etc.

    Pour l'instant, à chaque fois que je fais une modification dans mon schema.yml, je fais un "php symfony doctrine:build --all", suivi d'un "php symfony doctrine:data-load".

    Le problème est qu'évidemment, cela réinitialise la base de données. En développement, pas de soucis. Mais lorsque je serai en prod, je ne peux évidemment pas me permettre de faire un data dump de toutes les données, puis de refaire un build --all suivi d'un data-load, à chaque fois que je voudrai rajouter un champ à une table !

    Comment pourrai-je mettre à jour ma table en fonction de mon nouveau schema sans réinitialiser la base entière ? Et évidemment les classes auto-générées...

    Désolé si cette question peut paraitre idiote, mais je ne trouve pas de réponse... Merci pour vos lumières !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Par défaut
    Hello,

    Il n'y a jamais de question idiote à part celles qu'on ne pose pas !

    Il faut que tu regardes du coté des migrations doctrine.

    Perso je modifie mon schema, je génère une diff avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./symfony doctrine:generate-migrations-diff
    Cela te générera un fichier dans lib/migration/doctrine qui devrait ressembler à ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    /**
     * This class has been auto-generated by the Doctrine ORM Framework
     */
    class Version2 extends Doctrine_Migration_Base
    {
        public function up()
        {
            $this->addColumn('reference', 'rank', 'integer', '8', array(
                 'default' => '0',
                 ));
        }
     
        public function down()
        {
            $this->removeColumn('reference', 'rank');
        }
    }
    ensuite en prod tu mets à jour ta base avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./symfony doctrine:migrate
    qui créera une table contenant un numéro de version (ou mettra à jour ce numéro) qui servira à doctrine à savoir où il en est avant bien sur de modifier ta base

    Au delà de la simple modification de la base, tu as également la possibilité de déclencher des actions post ou pre migration si jamais tes données son affectés par les modifications de ton schema.

    Attention toutefois à bien mettre à jour model, forms et filters !

  3. #3
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2004
    Messages : 21
    Par défaut
    Super, c'est ce que je cherchais ! merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modifier une base de données
    Par dddodo dans le forum Access
    Réponses: 3
    Dernier message: 15/02/2007, 22h54
  2. [Conception] Modifier une base de données
    Par fabrice88 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 09/06/2006, 09h21
  3. Réponses: 8
    Dernier message: 23/03/2005, 19h28
  4. Réponses: 7
    Dernier message: 05/01/2005, 13h43
  5. [C#] Modifier une base de donnée
    Par Macintoc dans le forum Accès aux données
    Réponses: 15
    Dernier message: 03/06/2004, 11h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo