コアポイント
バージョン制御システムは、特にチームで作業する場合、コードの変更を追跡するために非常に貴重です。ただし、ほとんどのアプリケーションには、アプリケーションコード以上のものが含まれています。特に、パターンを変更する必要がある新しい機能を追加する場合、データベースの変更を管理することはより困難です。
モジュールで作業していると仮定し、データベーステーブルには追加の列が必要であることを認識してください。データベースクエリツールまたはコマンドラインを開き、その列を追加するだけです。ただし、これはバージョン制御アプリケーションコードのような変更の記録を残しません。これは、チームで作業するときに悪化する可能性があります。同僚が同じデータベースアップデートを実行せずにコードを変更すると、アプリケーションバージョンがクラッシュする可能性があります。これは、製品の更新をリリースするとさらに問題が発生します。これにより、同僚だけでなくユーザーにとってアプリが破損する可能性があるためです。
ソリューションの1つは、移行を使用して、データベーススキーマをコードに作成および変更する責任を転送することです。このようにして、変更はアプリケーションの残りの部分と一緒に管理でき、バージョン制御(バージョンを比較して監査証跡を維持できるなど)に慣れている機能を使用して、データベースの変更を処理できます。また、これらの変更を同じブランチまたはタグの一部にすることができるため、これらの変更をバージョンにシームレスに統合できます。
多くの主要なフレームワークには独自の移行実装がありますが、そうでない場合は、使用しない場合は、はしごを使用できます。
はしご紹介
Ladderは、データベースの移行を作成、実行、および管理するためのツールです。移行は単なるPHPクラスであるため、バージョン制御をアプリケーションの残りのコードでチェックインできます。
単一の移行でスキーマに多くの変更を加えることができますが、単一のテーブルまたは機能に移行を制限するのが最善です。
移行は常に順番に実行されます。したがって、数週間後に製品テーブルを作成して新しい移行を作成して、追加の列を追加して新しい移行を作成するとします。後者の前に前者を実行しようとすると、エラーが発生します。 Ladderは、移行に順番に移行し、データベース自体に移行を実行する記録(および時間)を保存することにより、この問題を解決します。
インストール
はしごは、BitbucketまたはComposerからダウンロードできます。ただし、起きて実行するにはいくつかのステップが必要です。
最も簡単な方法は(エレガントではないことを認めていますが)、プロジェクトルートからダウンロードまたはクローンを作成し、Ladderと呼ばれるディレクトリに配置することです。 Composerの使用に関する問題は、Composer Updateの実行が構成ファイルを上書きすることです。
5つの構成ファイルがあり、それぞれが手動で作成する必要があります。
cp ladder/config/config.php.example ladder/config/config.php cp ladder/config/database.php.example ladder/config/database.php cp ladder/config/diff.php.example ladder/config/diff.php cp ladder/config/editor.php.example ladder/config/editor.php cp ladder/config/table.php.example ladder/config/table.php
移行を作成
移行を作成してユーザーテーブルを作成することから始めましょう。コマンドラインについて
:これにより、Ladder/Migrations/00001_Create_Users_Tableという名前のファイルが作成されます。これには、コメントが発生したコメントの例がある基本構造が含まれています。 Ladder/config/editor.phpでauto-editをtrueに設定した場合、このファイルは指定されたテキストエディターですぐに開かれます。自由に移行を呼び出すことはできますが、一目でファイル名から移行が何をするかを見ることができると役立ちます。
php ladder/ladder.php create create_users_table
ここにファイルがどのように見えるか(明確にするためにコメントされたコードの行を削除しました):
移行が実行されたときにUP()メソッドを呼び、移行が巻かれたときのDown()メソッドを呼び出します。したがって、UP()メソッドとは逆の操作を常に実行する必要があります。この例では、up()メソッドはユーザーという名前のテーブルを作成し、down()メソッドは削除します。
class Create_Users_Table_Migration_00001 extends Migration { protected $min_version = '0.8.1'; public function up() { $this->create_table('users') ->column('email', 'varchar', array('limit' => 128, 'null' => FALSE)) ->column('password', 'varchar', array('limit' => 32, 'null' => FALSE)); } public function down() { $this->table('users')->drop(); } }
create_table()メソッドは新しいテーブルへの参照を返しますが、テーブルクラスには新しい列を追加する列()メソッドがあります。スムーズなインターフェイスがあるため、それらをリンクして複数の列を同時に作成できます。 ID列がないことに気付くでしょう - これは自動的に作成されます - つまり、IDという名前の自動インクラメント整数プライマリキーです。
table()テーブルへの参照を返しますが、テーブルがまだ存在しない場合はテーブルも作成します。
別の移行を作成しましょう。今回は役割を作成しますテーブル:
ファイル自体:
php ladder/ladder.php create create_roles_table
ここで、実際に移行を実行する必要があります。これを行うには:
class Create_Roles_Table_Migration_00002 extends Migration { protected $min_version = '0.8.1'; public function up() { $this->table('roles') ->column('nme', 'varchar', array('limit' => 128, 'null' => FALSE)); } public function down() { $this->table('roles')->drop(); } }
データベースを見ると、4つのテーブルがあります。
移行は自動的に作成され、どの移行が実行されたかを追跡する Migrations_kvdataも作成され、移行はキー価値ストレージに使用できます ユーザーと役割は、追加したテーブルです。php ladder/ladder.php migrate
cp ladder/config/config.php.example ladder/config/config.php cp ladder/config/database.php.example ladder/config/database.php cp ladder/config/diff.php.example ladder/config/diff.php cp ladder/config/editor.php.example ladder/config/editor.php cp ladder/config/table.php.example ladder/config/table.php
今、あなたは単に修正を行い、再び移行を実行することができます:
php ladder/ladder.php create create_users_table
再適用を使用するより速い方法もあります:
class Create_Users_Table_Migration_00001 extends Migration { protected $min_version = '0.8.1'; public function up() { $this->create_table('users') ->column('email', 'varchar', array('limit' => 128, 'null' => FALSE)) ->column('password', 'varchar', array('limit' => 32, 'null' => FALSE)); } public function down() { $this->table('users')->drop(); } }
しばらくして、ユーザーテーブルにステータスフィールドを含める必要がある新しい機能を開発します。これを行うには、新しい移行を作成する必要があります。
移行は次のようになります:
php ladder/ladder.php create create_roles_table
前と同様に、次のコマンドで実行してください:
class Create_Roles_Table_Migration_00002 extends Migration { protected $min_version = '0.8.1'; public function up() { $this->table('roles') ->column('nme', 'varchar', array('limit' => 128, 'null' => FALSE)); } public function down() { $this->table('roles')->drop(); } }
ここで、データベースを確認すると、ユーザーテーブルに新しい列があることがわかります。
php ladder/ladder.php migrate
データベーススキーマを管理するための移行の記述に加えて、はしごを使用してデータベースを事前に入力する(つまり、シード)データベースを使用することもできます。
たとえば、create_users_table移行を拡張してデフォルトのルートユーザーアカウントを作成できます。
set()およびget()メソッドを使用して、LadderのKeyvalueストアを利用して、後で参照できるようにユーザーIDを保存していることに注意してください。
php ladder/ladder.php remove 2
csvデータを挿入する代わりに更新するには、これを行うことができます:
php ladder/ladder.php migrate
この場合、送信パラメーターは更新を実行することを意味し、3番目のパラメーターには、更新するレコードを決定するためのキーフィールドのリストが含まれています。
php ladder/ladder.php reapply 2
他のデータベースを追加
デフォルトのデータベースファイルラダー/config/database.phpは、おそらくステージングまたはリアルタイムのデータベースを追加する方法を示しています。たとえば、
このように使用する接続を指定できます:
php ladder/ladder.php create add_status_to_users_table
class Add_Status_To_Users_Table_Migration_00003 extends Migration { protected $min_version = '0.8.1'; public function up() { $this->table('users') ->column('status', 'integer', array('null' => FALSE, 'default' => 0)); } public function down() { $this->table('users')->drop_column('status'); } }
status
ステータスコマンドを使用してデータベースステータスを取得できます。
例の出力:(元のドキュメントが特定の出力コンテンツを提供していないため、出力の例はここでは省略されています)
php ladder/ladder.php migrate
バージョン
(バージョンのコマンドの説明は、元のドキュメントで詳細に説明されているため、ここでは省略されています)
概要
この記事では、データベーススキーマと事前入力データを維持するために使用されるラダーを紹介します。 (元のドキュメントには梯子が要約されているため、概要部分はここで省略されています)データベースバージョンのバージョンとはしごの移行に関するFAQ
(FAQセクションはここでは省略されています。元のドキュメントはすでに詳細なFAQを提供しているため)
以上がはしごの移行によるデータベースバージョン化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。