既存のプロジェクトのアップグレード
すでにPHPixieを使用している場合、移行を使用するようにアップグレードするのは簡単です。
1.データベース接続設定(database.php)を更新します
PHPixieは、単一の接続文字列の代わりに、たとえば次のような追加のパラメーターが使用される代替構文をサポートするようになりました。
古い代わりに:
現在使用中
PHPixieは引き続きクエリの古い構成をサポートしますが、Migrateが機能するには、構成が新しい形式であることが重要です。
2. / asset / migrateフォルダーと設定ファイル/assets/config/migrate.phpをスケルトンからプロジェクトにコピーします。
以上です。
1.データベース接続設定(database.php)を更新します
PHPixieは、単一の接続文字列の代わりに、たとえば次のような追加のパラメーターが使用される代替構文をサポートするようになりました。
古い代わりに:
return array( 'default' => array( 'connection' => 'mysql:dbname=phpixie', 'user' => 'phpixie', 'password' => 'phpixie', 'driver' => 'pdo' ) );
現在使用中
return array( 'default' => array( 'database' => 'phpixie', 'user' => 'phpixie', 'password' => 'phpixie', 'adapter' => 'mysql', // one of: mysql, pgsql, sqlite 'driver' => 'pdo' ) );
PHPixieは引き続きクエリの古い構成をサポートしますが、Migrateが機能するには、構成が新しい形式であることが重要です。
2. / asset / migrateフォルダーと設定ファイル/assets/config/migrate.phpをスケルトンからプロジェクトにコピーします。
以上です。
構成
/assets/config/migrate.php設定を考慮してください :
<?php return array( // 'migrations' => array( 'default' => array( // database.php 'connection' => 'default', // , /assets/migrate/ 'path' => 'migrations', // : // 'migrationTable' => '__migrate', // 'lastMigrationField' => 'lastMigration' ) ), // ( ) 'seeds' => array( 'default' => array( // database.php 'connection' => 'default', // , /assets/migrate/ 'path' => 'seeds' ) ) );
ほとんどの場合、2つ以上のベースがある場合、または同じデータベースに異なるシードが必要な場合を除き、この構成で何も変更する必要はありません。
データベースの作成と削除
これで、コンソールから直接データベースを作成および削除できるようになりました。これは、新しいフレームワークによって実行されます:databaseコマンド:
framework:database ACTION [ CONFIG ] Create or drop a database Arguments: ACTION Either 'create' or 'drop' CONFIG Migration configuration name, defaults to 'default'
つまり、 コンソールフレームワーク:database createはデータベースが存在するかどうかを確認し、存在しない場合は作成し、 コンソールフレームワーク:データベースドロップは削除します。
移行
さて、今最も重要なことについて。 まず、まだこのようなものを使用していない人のための簡単な紹介。
移行により、データベースの構造の変更をコードに保存することができます。これは、既製のダンプを転送してから本番でデータベースを手動で変更するよりもはるかに便利です。 操作の原理は単純です。最後の移行の名前はデータベースに保存され、コマンドが起動されると、 natsort()順序で「より大きい」すべての移行が適用されます。つまり、ファイル1.sql、2.sql ... 22.sql、および最後のデータベース13.sqlでは、14から22のすべてが実行され、22が後者の名前としてデータベースに保存されます。 .sqlまたは.php形式にすることができます。
SQLの移行
ここではすべてが簡単です。個々の式が「-ステートメント」区切り文字で区切られている単なるSQLファイルです。次に例を示します。
CREATE TABLE fairies( id int NOT NULL, name VARCHAR(255) ); -- statement CREATE TABLE flowers( id int NOT NULL, name VARCHAR(255) );
PHP移行
これは、クエリを実行し、PHPixieデータベースクエリにアクセスすることさえできるPHPファイルです。
$this->execute("CREATE TABLE fairies( id int NOT NULL, name VARCHAR(255) )"); $this->message("- "); // $this->connection()->updateQuery() ->table('users') ->set(['role' => 'user']) ->execute();
ところで、数字だけでなく、移行の名前に短い説明を書くことを強くお勧めします。 natsortの順序が使用されるため、 _記号の後に安全にコメントを書くことができます(33_fairies_table.sqlなど)
ここで、すぐに2つの質問に答える必要があります。
ロールバックへのダウン移行がない理由:
データベース自体の観点から考えると、ロールバックなどはありません。 ロールバックは、前の移行がキャンセルした別の移行です。 さらに、1回の移行でテーブルを削除した場合、ロールバックによってテーブルが再作成される可能性がありますが、データを復元できないため、このようなロールバックは常に可能とは限りません。
createTable()などの汎用メソッドではなく、生のSQLクエリによって変更が行われるのはなぜですか?
普遍的な方法の問題は、異なるデータベース間の違いの微妙さを逃し、多くのことを推測する必要があることです。 さらに、ライブラリが更新され、わずかに異なる方法でフィールドとテーブルを作成し始めると、オプションが可能になり、古い移行を伴う本番ベースは、同じ移行が数ヶ月後に開始された新しいベースとは異なります。 さらに、テーブル用のSQLを作成し、あるデータベースから別のデータベースに変換するためのグラフィカルユーティリティがすでに非常に多くあるため、このためのヘルパーメソッドを作成するのはかなり不必要に思えます。
サイド
サイドは、データベースを満たすことができるデータです。 たとえば、一部のデフォルトユーザー、製品カテゴリなどを使用できます。また、機能テスト用のテストデータをデータベースに入力するために使用することもできます。 ファイル名はテーブル名と一致する必要があり、使用可能な形式は.phpおよび.jsonです。 例:
// /assets/migrate/seeds/fairies.php <?php return array( array( 'id' => 1, 'name' => 'Pixie' ), array( 'id' => 2, 'name' => 'Trixie' ), );
// /assets/migrate/seeds/flowers.json [ { "id": 1, "name": "daisy" }, { "id": 2, "name": "Rose" }, ]
.phpの場合、データ配列を返すことに加えて、データベース接続を使用してすべてを手動で行うこともできます。
// /assets/migrate/seeds/fairies.php <?php $this->connection()->insertQuery() ->data([ 'id' => 1, 'name' => 'Pixie' ]) ->execute();
シードを挿入するには、 framework:seedコマンドを使用します。
framework:seed [ --truncate ] [ CONFIG ] Seed the database with data Options: truncate Truncate the tables before inserting the data. Arguments: CONFIG Seed configuration name, defaults to 'default'
データがすでにテーブルに存在する場合、これはエラーにつながります。 挿入する前にテーブルをクリアするには、 -truncateパラメーターを使用できます。
明らかに、同じデータベース接続に対して、構成ファイルで複数のシードプロファイルを指定できます。
フレームワークなしで使用する
他のすべてのPHPixie Migrateコンポーネントと同様に、次のようなフレームワークとは別に使用できます。
$slice = new \PHPixie\Slice(); $database = new \PHPixie\Database($slice->arrayData(array( 'default' => array( 'database' => 'phpixie', 'user' => 'phpixie', 'password' => 'phpixie', 'adapter' => 'mysql', // one of: mysql, pgsql, sqlite 'driver' => 'pdo' ) ))); $filesystem = new \PHPixie\Filesystem(); $migrate = new \PHPixie\Migrate( $filesystem->root(__DIR__.'/assets/migrate'), $database, $slice->arrayData(array( 'migrations' => array( 'default' => array( 'connection' => 'default', 'path' => 'migrations', ) ), 'seeds' => array( 'default' => array( 'connection' => 'default', 'path' => 'seeds' ) ) ))); $cli = new \PHPixie\CLI(); $console = new \PHPixie\Console($slice, $cli, $migrate->consoleCommands()); $console->runCommand();
ここで、コマンド名は、 フレームワークプレフィックスなしのrun 、 seed 、 データベースになります。
もちろん、追加したい機能がいくつかありますが、3番目のPHPixieの移行を既に待っているユーザーにこのコンポーネントがアピールできることを願っています。