データベース駆動型のアプリケーションを開発し保守していると、ソースコードと同じように、データベースの構造も徐々に進化していきます。開発中に、新しいテーブルを追加したくなることがあります。アプリケーションが運用段階に入った後で、あるカラムにインデックスを追加する必要があることに気付くかも知れません。経過を記録することは、ソースコードの変更を記録するのと同じように、非常に重要なことです。ソースコードとデータベースの同期が崩れた場合には、全体のシステムが壊れる可能性が非常に大きいのです。データベースマイグレーションツールを提供して、データベースマイグレーションの履歴を管理し、新しいマイグレーションを適用したり、既存のマイグレーションを破棄したりすることを可能にしています。下記の例は、開発中にどのようにデータベースマイグレーションを使うことが出来るかを示します。コマンドラインツールによってサポートします。マイグレーションの履歴と新規マイグレーションの閲覧をサポートしています。以下、このツールの使い方を説明します。使う方が良いでしょう。ディレクトリが存在しており、書き込み可能であることを確かめてください。おいてデータベース接続を構成したかどうかもチェックしてください。新しいマイグレーション(例えば、ニュースのテーブルの作成)を作成するためには、下記のコマンドを実行します。クラス名の一部として使用されます。したがって、アルファベット、数字、および/または、アンダースコアだけで構成しなければなりません。いう名前の新しいファイルを作成します。このファイルは初期状態では以下の内容を含んでいます。パラメータから取られます。メソッドが、実際のデータベースマイグレーションを実装するコードを含むべきメソッドです。実行されたことを破棄するコードを含むことが出来ます。実装することが不可能なことがあります。中で行を復元することは出来ません。このような場合を、データベースの状態を以前の状態にロールバックすることが出来ないという意味で、不可逆なマイグレーションと呼びます。返して、このマイグレーションが破棄できないことを示しています。返すと、後続するマイグレーションの実行がすべてキャンセルされるようになりました。おいては、後続するマイグレーションをキャンセルするためには、例外を投げる必要がありました。例として、ニュースのテーブルを作成するためのマイグレーションを示しましょう。データベースのデータとスキーマを操作するために、一連のメソッドを提供しています。データを一行挿入します。返すデータベース接続(デフォルトでは、Yii::app()->db)を使用します。ものと非常によく似ています。メソッドが実行にかかった時間を計測することと、メソッドのパラメータに関していくつかメッセージを表示することを除けば、両者はほとんど同じです。以降でサポートされています。マイグレーションを実行するとき、通常は、データベースが一貫性と整合性を維持できるように、個別のマイグレーションが全体として成功または失敗するように配慮する必要があります。トランザクション機能を利用することが出来ます。関連のコードの残りをトランザクションで囲むことが出来ました。同様のコード}しかし、もっと簡単にトランザクションのサポートを追加する方法があります。メソッドを実装するという方法です。エラーが発生した場合は、トランザクションがロールバックされます。することで、データベースが整合性の取れた状態に保たれることを保証します。トランザクションをサポートしている訳ではありません。クエリの中には、トランザクションの中に入れることが出来ないものもあります。実装しなければなりません。ドキュメントを参照して下さい。ためには、以下のコマンドを実行します。migrateコマンドを実行すると、すべての新しいマイグレーションが一覧表示されます。メソッドが実行されます。いう名前のデータベーステーブルに記録を残します。これによって、ツールは、どのマイグレーションが適用済みで、どのマイグレーションが適用されていないかを特定することが出来ます。アプリケーションコンポーネントによって示されるデータベースの中にテーブルを自動的に作成します。時として、新しいマイグレーションのうちの一つないし数個だけを適用したい場合があります。その場合は、次のコマンドを使うことが出来ます。いう値を変更して、適用されるマイグレーションの数を変更することが出来ます。下記のコマンドを使って、特定のバージョンまでデータベースをマイグレートすることも可能です。101129_185401すなわち、マイグレーション名のタイムスタンプ部分を使って、データベースをマイグレートして到達したいバージョンを指定する訳です。最後に適用されたマイグレーションと指定したマイグレーションの間に複数のマイグレーションがある場合は、それらのマイグレーションがすべて適用されます。指定したマイグレーションが適用済みである場合は、その後に適用されたすべてのマイグレーションが破棄されます(次の章で説明します)。破棄したい場合は、下記のコマンドを使うことが出来ます。パラメータは何個のマイグレーションを破棄するかを指定するものです。適用された最後のマイグレーションだけを破棄することを意味します。前に説明したように、すべてのマイグレーションを破棄できない場合も有り得ます。不可逆のマイグレーションを破棄しようとすると例外が投げられて、破棄プロセス全体が終了させられます。¶マイグレーションの再適用とは、指定されたマイグレーションを最初に破棄して、それからもう一度適用することを意味します。これは次のコマンドで実行することが出来ます。パラメータは何個のマイグレーションを再適用するかを指定するものです。最後のマイグレーションだけを再適用することを意味します。¶マイグレーションを適用したり破棄したりする他に、マイグレーションツールはマイグレーションの履歴、および、まだ適用されていない新しいマイグレーションを表示することも出来ます。パラメータは何個のマイグレーションを表示するかを指定するものです。指定されない場合は、当てはまるすべてのマイグレーションが表示されます。最初のコマンドは適用済みのマイグレーションを表示し、第二のコマンドは適用が済んでいないマイグレーションを表示します。時として、実際には関係のあるマイグレーションを適用または破棄することなく、マイグレーション履歴を特定のマイグレーションバージョンに修正したい場合があります。このことは新しいマイグレーションを開発するときにしばしば起ります。次のコマンドを使ってこの目的を達することが出来ます。コマンドと全く同じですが、マイグレーションを適用または破棄せずに、マイグレーション履歴テーブルを指定されたバージョンに修正することだけを行うという点で違っています。¶マイグレーションコマンドをカスタマイズする方法がいくつか有ります。コマンドラインオプションを使うマイグレーションコマンドには、コマンドラインで指定できる五つのオプションが有ります。マイグレーションを対話モードで実行するかどうかを指定します。指定されたマイグレーションを実行するときに、ユーザは何らかの入力を促されます。