FuelPHPのマイグレーションの使い方について、主にoilコマンドによるマイグレーション生成の仕方についてまとめている
Magic Migrationのルールについては、fuel/packages/oil/classes/generate/generate.phpのmigration
メソッド、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
// fuel/app/config/development/migrations.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
// fuel/app/config/development/migrations.php
return array(
'version' =>;
array(
'app' =>;
array(
'default' =>;
array(
),
),
'module' =>;
array(
),
'package' =>;
array(
'auth' =>;
array(
),
),
),
'folder' =>; 'migrations/',
'table' =>; 'migration',
);
編集したらMigrationを実行できる
$ php oil refine migrate
参考