single: Configuration
構成設定
init コマンド を使ってプロジェクトを初期化すると、 Phinx はプロジェクトディレクトリーのルートに phinx.yml というデフォルトファイルを作成します。 このファイルは、YAML データのシリアル化形式を使用します。
--configuration コマンドラインオプションが与えられた場合、Phinx は指定されたファイルを ロードします。それ以外の場合は、 phinx.php 、 phinx.json または phinx.yml を見つけて、最初に見つかったファイルを読み込みます。詳しくは、 コマンド の章をご覧下さい。
WARNING
設定ファイルは、ウェブサーバー上の一般公開されているディレクトリーの外に保存してください。 このファイルにはデータベースの信用情報が含まれており、 誤ってプレーンテキストとして提供される可能性があります。
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 を使用します。
NOTE
%%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 を使用します。
NOTE
%%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: マイグレーションは実行時間(開始時間とも呼ばれます)によって順序付けられます。