Skip to content

french Complete Examples

Manuel Hervo edited this page Mar 20, 2014 · 6 revisions

Quelques exemples

Exemple complet (A)

Créez quelques migrations, qui vont créer un lot de tables et modifier des données existantes.

    phigrate-generate create_users_table

    phigrate-generate create_posts_table

    phigrate-generate fix_dangling_phones_data_bug

    phigrate-generate add_deleted_at_column_to_posts_table

En supposant que ce sont les premières migrations dans le système, les commandes ci-dessus vont créer des fichiers tels que:

    db/migrate/20100909133617_CreateUsersTable.php
    db/migrate/20100909133814_CreatePostsTable.php
    db/migrate/20100909133840_FixDanglingPhonesDataBug.php
    db/migrate/20100909133987_AddDeletedAtColumnToPostsTable.php

Voyons le contenu du fichier db/migrate/20100909133617_CreateUsersTable.php:

    <?php

    class CreateUsersTable extends Phigrate_Migration_Base
    {

        public function up()
        {
            $t = $this->createTable("users", array("id" => false))
                ->column("user_id", "integer", array("primary_key"      => true, 
                    "auto_increment" => true, 
                    "unsigned"       => true, 
                    "null"           => false))
                ->column("first_name", "string")
                ->column("last_name", "string")
                ->column("email", "string", array("limit" => 128))
                ->column("title", "string")
                ->finish();
            
            $this->addIndex("users", "email", array("unique" => true));
        }//up()

        public function down()
        {
            $this->removeIndex('users', 'email');
            $this->dropTable("users");
        }//down()
    }

Le contenu du fichier db/migrate/20100909133814_CreatePostsTable.php pourrait être le suivant.

Note: Nous allons créer une clef primaire à deux colonnes.

    <?php

    class CreatePostsTable extends Phigrate_Migration_Base
    {

        public function up()
        {
            $t = $this->createTable("posts", array("id" => false))
                ->column("post_id", "integer", array(
                    "null"        => false, 
                    "primary_key" => true))
                ->column("subject", "string")
                ->column("body", "string")
                ->column("created_at", "datetime", array(
                    'null'        => false,
                    "primary_key" => true))
                ->column("author_id", "integer");
                ->finish();
            
            $this->addIndex("posts", "author_id");
        }//up()
  
        public function down()
        {
            $this->removeIndex("posts", "author_id");
            $this->dropTable("posts");
        }//down()
    }
    ?>

Le contenu du fichier db/migrate/20100909133840_FixDanglingPhonesDataBug.php pourrait être:

    <?php

    class FixDanglingPhonesDataBug extends Phigrate_Migration_Base
    {

        public function up()
        {
            $this->execute("UPDATE phones SET area_code = '415' WHERE area_code IS NULL");
        }//up()

        public function down()
        {
            //Nothing to do. Data was wrong due to bug (#3461), so lets just fix
            // it once and for all.
        }//down()
    }
    ?>

Le contenu du fichier db/migrate/20100909133987_AddDeletedAtColumnToPostsTable.php pourrait être:

    <?php

    class AddDeletedAtColumnToPostsTable extends Phigrate_Migration_Base
    {

        public function up()
        {
            $this->addColumn("posts", "deleted_at", "datetime");
        }//up()

        public function down()
        {
            $this->removeColumn("posts", "deleted_at");
        }//down()
    }
    ?>

Finalement, nous allons exécuter les migrations ci-dessus:

    phigrate db:migrate

    Started: 2010-09-03 9:26pm PDT

    [db:migrate]: 
            Migrating UP to: 4 (current version: 0)
    ========= CreateUsersTable ======== (0.11)
    ========= CreatePostsTable ======== (0.00)
    ========= FixDanglingPhonesDataBug ======== (0.00)
    ========= AddDeletedAtColumnToPostsTable ======== (0.00)


    Finished: 2010-09-03 9:26pm PDT

Résumé

Pour chaque migration, il est également important d'implémenter la méthode down() qui permet d'annuler ce qui a été fait dans la méthode up(). Bien sûr, toutes les migrations ont une logique appropriée pour être exécutée lors du passage dans la méthode down(), dans ce cas on devrait juste indiquer les raisons.

Clone this wiki locally