PHP Phinx でデータベースマイグレーション

公式のページからドキュメントは CakePHP のドキュメントサイトに飛びます。CakePHP のドキュメントサイトは日本語訳を表示することができます。

既に存在するマイグレーションを行う対象のプロジェクトに composer を使ってインストールします。

php composer.phar require robmorgan/phinx

各種コマンドは vendor/bin/phinx を使って行います。

vendor/bin/phinx init

上記はマイグレーション初期化のコマンドでプロジェクトのルートディレクトリ直下に db/migrations フォルダを作成します。

vendor/bin/phinx create SomeMigrationClassName

このコマンドを実行すると db/migrations フォルダに YYYYMMDDHHMMSS_some_migration_class_name.php というファイルが出来ます。
作成されたファイルに書かれたコマンドをファイル名の日付順に実行することによって、テーブルの操作を行います。

このファイル名をどう決めるかはかなり重要になってきます。ファイル名に含める要素は、操作対象のテーブル、操作対象の内容、操作を行う理由、などが考えられます。

  • CreateNewTableNameForNewFeature
  • AddNewColumnsOnTableNameForNewFeature

などでしょうか。これ以上の細かい内容は、コード中や Git のコメントで補う形になるでしょう。

その他、以下の様なコマンドが用意されています。なお、以下のコマンドの共通のオプションとしては、コマンドを反映する環境を -e ENVIRONMENT オプションで指定できます。

  • migrate マイグレーションを実行する
  • rollback マイグレーションを戻す
    • 特定のバージョンにロールバックするには、-t YYYYMMDDHHMMSS を指定する
  • status マイグレーション状況を表示する
  • breakpoint どこまでロールバックするかを指定する
  • seed:create データベースの初期データを投入するためのクラスファイルを作成
  • seed:run データベースの初期データ作成クラスファイルを実行する
vendor/bin/phinx migrate -e production SomeMigrationClassName
<?php
declare(strict_types=1);
 
use Phinx\Migration\AbstractMigration;
 
final class AttendancesMigration extends AbstractMigration
{
    /**
     * Change Method.
     *
     * Write your reversible migrations using this method.
     *
     * More information on writing migrations is available here:
     * https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method
     *
     * Remember to call "create()" or "update()" and NOT "save()" when working
     * with the Table class.
     */
    public function change(): void
    {
        $table = $this->table('attendances');
        $table->addColumn('work_on',    'date')
              ->addColumn('user',       'string')
              ->addColumn('name',       'string',   ['null' => true])
              ->addColumn('begin_at',   'string',   ['null' => true])
              ->addColumn('end_at',     'string',   ['null' => true])
              ->addColumn('created_at', 'datetime')
              ->addColumn('created_by', 'string',   ['null' => true])
              ->addColumn('updated_at', 'datetime')
              ->addColumn('updated_by', 'string',   ['null' => true])
              ->addColumn('deleted_at', 'datetime', ['null' => true])
              ->addColumn('deleted_by', 'string',   ['null' => true])
              ->addIndex(['work_on', 'user'], ['unique' => true, 'name' => 'UNQ_work_on__user'])
              ->save();
    }
}
  • devops/php/phinx_db_migration.txt
  • 最終更新: 2021/10/19 21:24
  • by admin