FuelPHP で複数データベースへ migration を行うやり方を説明します。 FuelPHP 1.7.2 を想定しています。
FuelPHP では php oil g model item name:string
などのようにすると、 model と migration のためのコードが生成されます。 php oil g scaffold ...
とやった場合にも migration のコードが生成されます。 ここで生成される migration コード に手を加えることで 複数データベースに対応させることができます。
変更前のコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php namespace Fuel\Migrations; class Create_items { public function up() { \DBUtil::create_table('items', array( 'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true, 'unsigned' => true), 'name' => array('constraint' => 255, 'type' => 'varchar'), 'created_at' => array('constraint' => 11, 'type' => 'int', 'null' => true), 'updated_at' => array('constraint' => 11, 'type' => 'int', 'null' => true), ), array('id')); } public function down() { \DBUtil::drop_table('items'); } } |
変更後のコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php namespace Fuel\Migrations; class Create_items { public function up() { \DBUtil::create_table('items', array( 'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true, 'unsigned' => true), 'name' => array('constraint' => 255, 'type' => 'varchar'), 'created_at' => array('constraint' => 11, 'type' => 'int', 'null' => true), 'updated_at' => array('constraint' => 11, 'type' => 'int', 'null' => true), ), array('id'), true, false, null, array(), 'db_config_key'); } public function down() { \DBUtil::drop_table('items', 'db_config_key'); } } |
db_config_key
というのを付け加えました。 このパラメータでデータベースを指定できます。 具体的には config/db.php
内 のキーになります。 たとえば 'default'
なんてのが入ります。 何も指定がなければ 'default'
が採用されます。
このようにして複数データベースに対応させることができます。 migration の コードごとに データベースを書き換えればいいですからね。
Model の コードを活用した書き方
Model を利用してやってみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php namespace FuelMigrations; class Create_items { public function up() { DBUtil::create_table(Model_Item::table(), array( 'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true, 'unsigned' => true), 'name' => array('constraint' => 255, 'type' => 'varchar'), 'created_at' => array('constraint' => 11, 'type' => 'int', 'null' => true), 'updated_at' => array('constraint' => 11, 'type' => 'int', 'null' => true), ), Model_Item::primary_key(), true, false, null, array(), Model_Item::connection()); } public function down() { DBUtil::drop_table(Model_Item::table(), Model_Item::connection()); } } |
Model_Item
が Orm
を使っているという前提の話ですが、 データベースの指定に Model_Item::connection()
を、 テーブルの指定に Model_Item::table()
を、 主キーの指定に Model_Item::primary_key()
を使っています。 このようにすると、 model の中に書いておけば migration のコードを変更しなくても済みます。 (ただし 既存テーブルについて model の テーブル名や $_connection
を変更する場合には注意が必要になります。)