FuelPHPのマイグレーションの使い方について、主にoilコマンドによるマイグレーション生成の仕方についてまとめている

Magic Migrationのルールについては、fuel/packages/oil/classes/generate/generate.phpmigrationメソッド、fuel/packages/oil/classes/generate/migration/actions.phpを見ると詳細が分かる

oil generateコマンドの使い方

テーブルの作成とフィールド定義

テーブルの作成はモデルの作成と同時に実行するのが便利
ビューも必要ならscaffoldを使う

$ php oil generate model Comment post_id:integer message:string
	Creating model: /Applications/MAMP/htdocs/appointments/fuel/app/classes/model/comment.php
	Creating migration: /Applications/MAMP/htdocs/appointments/fuel/app/migrations/012_create_comments.php

テーブル作成のマイグレーションのみを生成する場合は
create_{テーブル名}のようにマイグレーション名を指定する

$ php oil generate migration create_comments post_id:integer message:string

デフォルトはNot null制約がつくので、nullを許容する場合は「:null
unique指定する場合は「:unique
を型の指定に続けて指定する

$ oil g model user name:string:null tel:string:unique

また、oil generateコマンドで作成したマイグレーションの主キーの指定は、オートインクリメントのid固定なので、別名や複合主キーを指定したい場合は、生成されたマイグレーションを修正する必要がある

テーブル名の変更

テーブル名の変更は、rename_table_{旧テーブル名}_to_{新テーブル名}のように、rename_table_で始まる名前を指定する

$ php oil generate migration rename_table_users_to_accounts

カラムの追加

カラムの追加は、add_{カラム名}_to_{テーブル名}のように、add_で始まる名前を指定すると
\DBUtil::add_fieldsの引数に指定したフィールドのリストがセットされたマイグレーションコードが生成される

$ php oil generate migration add_name_and_link_to_attachment name:string link:string

カラムの変更

カラムの追加は、rename_field_{旧カラム名}_to_{新カラム名}_in_{テーブル名}のように、rename_field_で始まる名前を指定すると
\DBUtil::modify_fieldsの引数に指定したフィールドのリストがセットされたマイグレーションコードが生成される

$ php oil generate migration rename_field_name_to_username_in_accounts

カラムの削除

カラムの削除は、delete_{カラム名}_from_{テーブル名}のように、delete_で始まる名前を指定すると
\DBUtil::drop_fieldsの引数に指定したフィールドのリストがセットされたマイグレーションコードが生成される

$ php oil generate migration delete_bio_from_accounts bio:text

マイグレーションの実行

$ php oil refine migrate

環境を指定した、マイグレーションの実行

$ FUEL_ENV=production php oil refine migrate

データベースのリセット

FuelPHPのMigrationにはリセット機能がなく、かつ、Migrationの状態がfuel/app/config/development/migrations.phpファイルに保存されているため、開発中にデータベースを一から作成し直したい場合、fuel/app/config/development/migrations.phpを直接編集してMigrationが何も適用されていない状態にする必要がある

<?php
return array(
    'version' => 
    array(
        'app' => 
        array(
            'default' => 
            array(
                0 => '001_create_users',
                1 => '002_create_articles',
            ),
        ),
        'module' => 
        array(
        ),
        'package' => 
        array(
            'auth' => 
            array(
            ),
        ),
    ),
    'folder' => 'migrations/',
    'table' => 'migration',
);

version.app.defaultの配列を空にする

<?php
return array(
    'version' => 
    array(
        'app' => 
        array(
            'default' => 
            array(
            ),
        ),
        'module' => 
        array(
        ),
        'package' => 
        array(
            'auth' => 
            array(
            ),
        ),
    ),
    'folder' => 'migrations/',
    'table' => 'migration',
);

編集したらMigrationを実行できる

$ php oil refine migrate

参考