読者です 読者をやめる 読者になる 読者になる

FuelPHP でマイグレーションを試してみた

FuelPHPマイグレーションを試してみた.

雰囲気的には Railsマイグレーションと似ていて,特に違和感無く使えた.

FuelPHP 環境

Vagrant に立てた.

$ oil -v
Fuel: 1.7.3 running in "development" mode

テーブルを作る

FuelPHP 本に載ってる例をそのまま試してみた.

まず oil generate migrationform テーブルのマイグレーションファイルを自動生成する.

$ oil generate migration create_form name:string[50] email:string[100] comment:string[400] ip_address:string[39] user_agent:string[512] created_at:int updated_at:int
    Creating migration: /var/www/fuel/fuel/app/migrations/001_create_form.php

マイグレーションファイルを確認する.

Rails と違って,プレフィックスは 001 になってた.999 までマイグレーションファイルが増えたらどうなるんだろう?

$ cat fuel/app/migrations/001_create_form.php
<?php

namespace Fuel\Migrations;

class Create_form
{
    public function up()
    {
        \DBUtil::create_table('form', array(
            'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true, 'unsigned' => true),
            'name' => array('constraint' => 50, 'type' => 'varchar'),
            'email' => array('constraint' => 100, 'type' => 'varchar'),
            'comment' => array('constraint' => 400, 'type' => 'varchar'),
            'ip_address' => array('constraint' => 39, 'type' => 'varchar'),
            'user_agent' => array('constraint' => 512, 'type' => 'varchar'),
            'created_at' => array('constraint' => 11, 'type' => 'int'),
            'updated_at' => array('constraint' => 11, 'type' => 'int'),

        ), array('id'));
    }

    public function down()
    {
        \DBUtil::drop_table('form');
    }
}

次に oil refine migrateマイグレーションを実行する.

$ oil refine migrate
Performed migrations for app:default:
001_create_form

MySQL で確認すると formmigration テーブルができていた.

mysql> SHOW TABLES;
+--------------------+
| Tables_in_fuel-dev |
+--------------------+
| form               |
| migration          |
+--------------------+
2 rows in set (0.00 sec)

id カラムは自動で作られる.

mysql> DESC form;
+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| name       | varchar(50)      | NO   |     | NULL    |                |
| email      | varchar(100)     | NO   |     | NULL    |                |
| comment    | varchar(400)     | NO   |     | NULL    |                |
| ip_address | varchar(39)      | NO   |     | NULL    |                |
| user_agent | varchar(512)     | NO   |     | NULL    |                |
| created_at | int(11)          | NO   |     | NULL    |                |
| updated_at | int(11)          | NO   |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)

migrationRails における schema_migrations と同じで,マイグレーションの状況を管理するためのテーブルだと思う.

mysql> SELECT * FROM migration;
+------+---------+-----------------+
| type | name    | migration       |
+------+---------+-----------------+
| app  | default | 001_create_form |
+------+---------+-----------------+
1 row in set (0.00 sec)

テーブルを消す

せっかくなので oil refine migrate:downマイグレーションdown を試してみた.

$ oil refine migrate:down
Reverted migrations for app:default:
- 001_create_form

ちゃんと DROP TABLE できた.

mysql> SHOW TABLES;
+--------------------+
| Tables_in_fuel-dev |
+--------------------+
| migration          |
+--------------------+
1 row in set (0.00 sec)

migration からもレコードが削除されている.

mysql> SELECT * FROM migration;
Empty set (0.01 sec)

FuelPHP

気になるところを試しながら流し読みしてるところ.

本に載ってる MAMP + NetBeans の開発環境はどうしても嫌だったから Vagrant + IntelliJ でコードを書いてる.

はじめてのフレームワークとしてのFuelPHP 改訂版

はじめてのフレームワークとしてのFuelPHP 改訂版