デラーズ・ブートキャンプ

ギークになりたい平凡プログラマの日記

Phinx入門

PHPの現場でマイグレーションツールのPhinxを使い始めたのでメモ書きです。少しずつ導入し始めていますが、だいぶ具合が良いです。マイグレーションツールのノウハウなんて暫く前からあるので今更感がありますが、そこは置いておきましょう。

参考ページ

導入

今回は Phinx を個別でインストールします。Composerを使っているのであれば一撃でインストールは完了です。そうでない場合もダウンロードしてきて参照設定すればOKです。CakePHP3ではフレームワーク内に実装されているので cake.php から使う事ができるはず。

# Comporserでインストールする場合
php composer.phar require robmorgan/phinx
php composer.phar install --no-dev

# コマンドの実行でバージョンが表示されればOK
vendor/bin/phinx -V
Phinx by Rob Morgan - https://phinx.org. 0.8.1

phinx.yml が設定ファイルです。 migrationを保存するディレクトseedを保存するディレクトDBの接続設定 を行います。また、ここで指定したディレクトリも忘れずに作成しましょう。

マイグレーションファイルの作成

# createコマンドで雛形生成
vendor/bin/phinx create NewHogeMigration  # マイグレーション名はキャメルケース

# migrationディレクリにファイルが作成されました
ls db/migration
20170618080652_new_hoge_migration.php
# 20170618080652_new_hoge_migration.php
# コマンドで作成した場合 change() メソッドが初期で作成されていますが、
# クエリの実行のみで入門した方が分かりやすいため下の内容に書き換え

<?php 
use Phinx\Migration\AbstractMigration;
class NewHogeMigration extends AbstractMigration
{
    /**
     *  create hoges talbe
     */
    public function up(){
        $count = $this->execute('
            CREATE TABLE `hoges` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(100) DEFAULT NULL,
              `email` varchar(255) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
        ');
    }

    /**
     * drop hoges table
     */
    public function down(){
        $count = $this->execute('DROP TABLE hoges;');
    }
}

実行

migrate
# upメソッドが実行され `hoges` テーブルが作成されます。
# また、migrationの情報もDBに保持するため、`migrations` テーブルが作成されデータが更新されます。
vendor/bin/phinx migrate
rollback
# downメソッドが実行され `hoges` テーブルが削除されます。
vendor/bin/phinx migrate

初期データの作成

vendor/bin/phinx seed:create HogeSeeder
# HogeSeeder.php
<?php 
use Phinx\Seed\AbstractSeed;
class UserSeeder extends AbstractSeed
{
    public function run()
    {
        $faker = Faker\Factory::create('ja_JP');
        $data = [];

        ## 100件のダミーデータを作成
        for ($i = 0; $i < 100; $i++) {
            $data[] = [
                'name' => $faker->name,
                'kana' =>  $faker->kanaName($gender = null|'male'|'female'),
                'email' => $faker->email,
                'created' => date('Y-m-d H:i:s'),
            ];
        }
        $this->insert('users', $data);
    }
}
Faker

ダミーデータの作成には Fakerを使います。未インストールの場合は composer require fzaninotto/faker でインストールします。

Seedの実行
# -sオプションでSeedファイルを指定
vendor/bin/phinx seed:run -s HogeSeeder