init コマンド を使ってプロジェクトを初期化すると、
Phinx はプロジェクトディレクトリーのルートに phinx.yml
というデフォルトファイルを作成します。
このファイルは、YAML データのシリアル化形式を使用します。
--configuration
コマンドラインオプションが与えられた場合、Phinx は指定されたファイルを
ロードします。それ以外の場合は、 phinx.php
、 phinx.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 データベースを宣言すると、単純化された構造が使用されます。
environments:
development:
adapter: sqlite
name: ./data/derby
testing:
adapter: sqlite
memory: true # *任意* の値で memory を設定すると、 name が上書きされます
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
: マイグレーションは実行時間(開始時間とも呼ばれます)によって順序付けられます。