1

プロジェクトのmysqlテーブルの更新を環境全体で適切に処理するためのアイデアを探しています。私はCI DB Forgeクラスを見てみましたが、これは私を少し助けるかもしれないと信じています。私の考えは次のとおりです。

  1. データベースのインストール、テーブルのアップグレード、または変更ごとに新しいファイルを作成します。このファイルには、関連する各タスクを実行するための生のmysqlクエリが含まれます。
  2. コントローラがロードされる前に、フックを介してアップグレードスクリプトを実行します
  3. プロジェクトの読み込みを続行します

これは正しい考えですか?これは、Magentoが拡張機能ごとにデータベースのアップグレードを処理する方法と非常によく似ています。

4

1 に答える 1

6

Migrationsクラスを探しているようですね。これはかなり新しいライブラリであり、現時点でのドキュメントは私の意見ではあまり良くありません。

このライブラリを有効にしapplication/config/migrations.phpてロードすると、というデータベーステーブルが作成されますmigrations。そこからのワークフローは次のとおりです。

  1. 新しいファイルを作成application/migrationsします。必ず、のような連番のファイル名で名前を付けてください001_some_descriptive_name.php。形式は重要です。正確に3つの数字と、その後に少なくとも1つの数字があり_ます。
  2. 新しいファイルで、ファイル名にちなんで名付けられたクラスを作成します。そのため、001_some_descriptive_name.phpはというクラスを保持し、クラスMigration_Some_descriptive_nameを拡張する必要がありCI_Migrationます。クラス名の大文字と小文字は重要です。最初Migration_1つの大文字、次に小文字です。
  3. クラス内にpublicメソッドupとpublicメソッドを作成しますdown
  4. upメソッド内に、データベースを変更する移行コードを追加します。db forgeライブラリーを使用することも、単なる古い$this->db->query()呼び出しを使用することもできます。複数のデータベースシステムをサポートする必要がある場合は、Dbforgeの方が移植性が高く、おそらくそれを使用する方がよいでしょう。
  5. メソッド内に、downの効果を元に戻すコードを追加しますupup列を追加する場合はその列を削除する必要があり、テーブルを作成するdown場合はそのテーブルを削除する必要があります。updown
  6. 移行クラスが終了したらmigration_version、移行構成ファイル内にバンプします。
  7. コントローラを作成して移行ライブラリをロードし、これを呼び出すと$this->migration->current()、データベーステーブルからバージョンがチェックされmigration、移行クラスupまたはdownメソッドが実行されて、手順6で設定した構成ファイルの移行バージョンに到達します。はバージョン2であり、構成は5を使用する必要があることを示しています。その後、、、、filenamesを使用して移行のメソッドを順番にup実行します。小さい数値を設定すると、現在のメソッドが呼び出されます。データベースは0からカウントを開始するため、ファイルを作成しないでください。003_...004_...005_..down000_...

冒険心がある場合は、移行クラスをロードし、get_instance()->migration->latest()ページのロードごとに実行するフックを作成して、新しい移行クラスをデプロイすると、すべての環境でデータベースが自動更新されるようにすることができます。

于 2013-03-26T20:46:46.557 に答える