FuelPHP での Migration の使い方 (2)
FuelPHP での Migration の使い方 で説明されていない項目について補足します。
デフォルト値を設定する
フィールドの指定に default[デフォルト値] を追加します。
$ oil g migration create_table1 title:string[50]:default[abc]
生成されるファイルは以下のようになります。
<?php namespace Fuel\Migrations; class Create_table1 { public function up() { \DBUtil::create_table('table1', array( 'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true), 'title' => array('constraint' => 50, 'type' => 'varchar', 'default' => 'abc'), 'created_at' => array('constraint' => 11, 'type' => 'int'), 'updated_at' => array('constraint' => 11, 'type' => 'int'), ), array('id')); } public function down() { \DBUtil::drop_table('table1'); }
ただし、oil コマンドの引数に与えられる文字は制限されていますので、許可されない文字を指定した場合は、期待するコードが生成されません。
ということで、「oil r migrate」を実行する前に、生成されたコードを確認するようにしましょう。
migrate を実行し作成されたテーブルの定義は、例えば、以下のようになります。
CREATE TABLE IF NOT EXISTS `table1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(50) NOT NULL DEFAULT 'abc', `created_at` int(11) NOT NULL, `updated_at` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
NULL にする
フィールドの指定に null を追加します。
$ oil g migration create_table1 title:string[50]:null
生成されるファイルは以下のようになります。
<?php namespace Fuel\Migrations; class Create_table1 { public function up() { \DBUtil::create_table('table1', array( 'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true), 'title' => array('constraint' => 50, 'type' => 'varchar', 'null' => true), 'created_at' => array('constraint' => 11, 'type' => 'int'), 'updated_at' => array('constraint' => 11, 'type' => 'int'), ), array('id')); } public function down() { \DBUtil::drop_table('table1'); }
migrate を実行し作成されたテーブルの定義は、例えば、以下のようになります。
CREATE TABLE IF NOT EXISTS `table1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(50) DEFAULT NULL, `created_at` int(11) NOT NULL, `updated_at` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
インデックスを付ける
現在の oil コマンドではできません。
ただし、FuelPHP のマイグレーションは結局、fuel/app/migrations/ にデータベースを操作するクラスを作成しているだけですので、そのファイルを修正すればいいだけです。
必要なメソッドは、ドキュメント
を参照します。
例えば、以下のようにしてファイルを生成します。
$ oil g migration create_table1 title:string[50]
すると、以下のファイルが生成されます。
<?php namespace Fuel\Migrations; class Create_table1 { public function up() { \DBUtil::create_table('table1', array( 'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true), 'title' => array('constraint' => 50, 'type' => 'varchar'), 'created_at' => array('constraint' => 11, 'type' => 'int'), 'updated_at' => array('constraint' => 11, 'type' => 'int'), ), array('id')); } public function down() { \DBUtil::drop_table('table1'); }
上記のファイルにインデックスを追加するコードを追加します。
--- a/fuel/app/migrations/004_create_table1.php +++ b/fuel/app/migrations/004_create_table1.php @@ -12,6 +12,8 @@ class Create_table1 'created_at' => array('constraint' => 11, 'type' => 'int'), 'updated_at' => array('constraint' => 11, 'type' => 'int'), ), array('id')); + + \DBUtil::create_index('table1', 'title', 'idx_title'); } public function down()
そして、migrate を実行します。
以下のようなテーブルが作成されます。
CREATE TABLE IF NOT EXISTS `table1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(50) NOT NULL, `created_at` int(11) NOT NULL, `updated_at` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `idx_title` (`title`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;