構成設定

init コマンド を使ってプロジェクトを初期化すると、 Phinx はプロジェクトディレクトリーのルートに phinx.yml というデフォルトファイルを作成します。 このファイルは、YAML データのシリアル化形式を使用します。

--configuration コマンドラインオプションが与えられた場合、Phinx は指定されたファイルを ロードします。それ以外の場合は、 phinx.phpphinx.json または phinx.yml を見つけて、最初に見つかったファイルを読み込みます。詳しくは、 コマンド の章をご覧下さい。

警告

設定ファイルは、ウェブサーバー上の一般公開されているディレクトリーの外に保存してください。 このファイルにはデータベースの信用情報が含まれており、 誤ってプレーンテキストとして提供される可能性があります。

JSON ファイルと YAML ファイルは パース されますが、PHP ファイルは インクルード されています。 つまり、こういうことです。

  • 設定項目の配列を return する必要があります。
  • 変数スコープはローカルです。つまり、初期化ファイルが読み取ったり変更したりするグローバル変数を 明示的に宣言する必要があります。
  • その標準出力は抑制されます。
  • JSON や YAML とは異なり、環境接続の詳細を省略し、代わりに初期化された PDO インスタンスを含む connection を指定することができます。 これは、マイグレーションがアプリケーションとやり取りしたり、同じ接続を共有したりする場合に便利です。 ただし、Phinx は PDO 接続からデータベース名を推測できないため、データベース名を渡すことを 忘れないでください。
<?php
require 'app/init.php';

global $app;
$pdo = $app->getDatabase()->getPdo();

return ['environments' =>
         [
           'default_database' => 'development',
           'development' => [
             'name' => 'devdb',
             'connection' => $pdo,
           ]
         ]
       ];

マイグレーションのパス

最初のオプションは、マイグレーションのディレクトリーへのパスを指定します。 デフォルトでは Phinx は %%PHINX_CONFIG_DIR%%/db/migrations を使用します。

注釈

%%PHINX_CONFIG_DIR%% は特別なトークンで、 phinx.yml ファイルが保存されているルートディレクトリーに自動的に置き換えられます。

デフォルトの %%PHINX_CONFIG_DIR%%/db/migrations を上書きするには、 yaml 設定に次の行を追加する必要があります。

paths:
    migrations: /your/full/path

また、設定内の配列を使用して複数のマイグレーションパスを提供することもできます。

paths:
    migrations:
        - application/module1/migrations
        - application/module2/migrations

パスに %%PHINX_CONFIG_DIR%% トークンを使うこともできます。

paths:
    migrations: '%%PHINX_CONFIG_DIR%%/your/relative/path'

マイグレーションは glob で取り込まれるので、複数のディレクトリーのパターンを定義することができます。

paths:
    migrations: '%%PHINX_CONFIG_DIR%%/module/*/{data,scripts}/migrations'

カスタムベースクラス

デフォルトでは、すべてのマイグレーションは Phinx の AbstractMigration クラスを継承します。 これは、設定の中で migration_base_class を設定することによって、 AbstractMigration を継承したカスタムクラスに設定することができます。

migration_base_class: MyMagicalMigration

シードのパス

2番目のオプションは、シードディレクトリーへのパスを指定します。 デフォルトでは Phinx は %%PHINX_CONFIG_DIR%%/db/seeds を使用します。

注釈

%%PHINX_CONFIG_DIR%% は特別なトークンで、 phinx.yml ファイルが保存されているルートディレクトリーに自動的に置き換えられます。

デフォルトの %%PHINX_CONFIG_DIR%%/db/seeds を上書きするには、 yaml 設定に以下を追加する必要があります。

paths:
    seeds: /your/full/path

また、設定内で配列を使用して複数のシードパスを指定することもできます。

paths:
    seeds:
        - /your/full/path1
        - /your/full/path2

パスに %%PHINX_CONFIG_DIR%% トークンを使うこともできます。

paths:
    seeds: '%%PHINX_CONFIG_DIR%%/your/relative/path'

環境

Phinx の主な機能の1つは、複数のデータベース環境をサポートすることです。Phinx を使用して、 開発環境でマイグレーションを作成した後、本番環境で同じマイグレーションを実行することができます。 環境は environments 以下にネストされたコレクションで指定されます。例:

environments:
    default_migration_table: phinxlog
    default_database: development
    production:
        adapter: mysql
        host: localhost
        name: production_db
        user: root
        pass: ''
        port: 3306
        charset: utf8
        collation: utf8_unicode_ci

上記は production と呼ばれる新しい環境を定義します。

複数の開発者が同じプロジェクトで作業し、それぞれが異なる環境を持つ状況 (例えば、 <environment type>-<developer name>-<machine name> のような規約)、 または、別々の目的(ブランチ、テストなど)のために別々の環境を持つ必要がある場合には、 環境変数 PHINX_ENVIRONMENT を使用して yaml ファイルのデフォルト環境を上書きします。

export PHINX_ENVIRONMENT=dev-`whoami`-`hostname`

テーブルのプレフィクスとサフィックス

テーブルのプレフィックスとサフィックスを定義することができます。

environments:
    development:
        ....
        table_prefix: dev_
        table_suffix: _v1
    testing:
        ....
        table_prefix: test_
        table_suffix: _v2

ソケット接続

MySQL アダプターを使用する場合、ネットワーク接続の代わりにソケットを使用することもできます。 ソケットのパスは unix_socket で設定されます。

environments:
    default_migration_table: phinxlog
    default_database: development
    production:
        adapter: mysql
        name: production_db
        user: root
        pass: ''
        unix_socket: /var/run/mysql/mysql.sock
        charset: utf8

外部変数

Phinx は PHINX_ というプレフィックスが付いた環境変数を自動的に取得し、 設定ファイルのトークンとして利用できるようにします。 トークンは変数とまったく同じ名前になりますが、どちらの側にも2つの %% のシンボルをラップすることによってアクセスする必要があります。 例: %%PHINX_DBUSER%% 。これは、秘密のデータベース資格情報をバージョン管理システムではなく サーバーに直接格納する場合に特に便利です。この機能は、次の例で簡単に実証できます。

environments:
    default_migration_table: phinxlog
    default_database: development
    production:
        adapter: mysql
        host: '%%PHINX_DBHOST%%'
        name: '%%PHINX_DBNAME%%'
        user: '%%PHINX_DBUSER%%'
        pass: '%%PHINX_DBPASS%%'
        port: 3306
        charset: utf8

サポートするアダプター

Phinx は現在、次のデータベースアダプターをネイティブにサポートしています。

  • MySQL: mysql アダプターを指定。
  • PostgreSQL: pgsql アダプターを指定。
  • SQLite: sqlite アダプターを指定。
  • SQL Server: sqlsrv アダプターを指定。

SQLite

SQLite データベースを宣言すると、単純化された構造が使用されます。

environments:
    development:
        adapter: sqlite
        name: ./data/derby
    testing:
        adapter: sqlite
        memory: true     # *任意* の値で memory を設定すると、 name が上書きされます

SQL Server

sqlsrv アダプターを使用して名前付きインスタンスに接続するときは、 SQL Server が自動的にポートをネゴシエートするので、 port 設定を省略してください。 さらに、 charset: utf8 を省略するか、SQL Server の UTF8 に対応する charset: 65001 に変更してください。

カスタムアダプター

Phinx\\Db\\Adapter\\AdapterInterface の実装を AdapterFactory で登録することで カスタムアダプターを提供できます。

$name  = 'fizz';
$class = 'Acme\Adapter\FizzAdapter';

AdapterFactory::instance()->registerAdapter($name, $class);

アダプターは $app->run() が呼び出される前にいつでも登録することができます。 通常は bin/phinx によって呼び出されます。

エイリアス

テンプレート作成クラス名は、別名をつけて create コマンド--class コマンドラインオプションで使うことができます。

エイリアス化されたクラスは Phinx\Migration\CreationInterface インタフェースを実装する 必要があります。

aliases:
    permission: \Namespace\Migrations\PermissionMigrationTemplateGenerator
    view: \Namespace\Migrations\ViewMigrationTemplateGenerator

バージョンの順序

マイグレーションの状態をロールバックまたは表示するとき、Phinx は version_order オプションに従って実行されたマイグレーションを処理します。これは次の値をとります。

  • creation (デフォルト): マイグレーションはファイル名の一部でもある作成時間順に並べ替えられます。
  • execution: マイグレーションは実行時間(開始時間とも呼ばれます)によって順序付けられます。