SchemaShell は、スナップショットを生成ししたりデータベースのスナップショットをリストアしたりするだけでなく、スキーマオブジェクト・スキーマ SQL ダンプを生成する機能を提供します。
生成されたスキーマファイルを使用すると、データベースに依存しないスキーマを簡単に移動できます。使用しているデータベースのスキーマファイルは、次のように生成します:
$ cake schema generate
これを実行すると、 app/config/sql
ディレクトリに schema.php
ファイルが生成されます。
スキーマシェルはモデルが定義されているテーブルのみ処理します。スキーマシェルにすべてのテーブルを処理させるには、コマンドラインで
-f
オプションを指定する必要があります。
後から、すでに作成した schema.php ファイルを用いてデータベーススキーマを再構築するには、次のようにします:
$ cake schema run create
これは schema.php の内容に従ってテーブルを削除し、作成します。
スキーマファイルは SQL
ダンプファイルを生成するために使用することもできます。CREATE TABLE
ステートメントを含む SQL ファイルを生成するには、次のようにします:
$ cake schema dump filename.sql
filename.sql は SQL ダンプ用に設計されたファイル名です。filename.sql を省略した場合、SQL ダンプはコンソールに出力されますが、ファイルには書き出されません。
マイグレーションはデータベーススキーマのバージョン管理をします。機能を開発した場合、データベースの変更を適用するのが簡単でデータベースに依存しない方法でできます。マイグレーションは、SCM 管理スキーマファイルかスキーマスナップショットのどちらかを通して実行されます。スキーマシェルを使用してスキーマファイルをバージョン管理するのはかなり簡単です。すでにスキーマファイルがある場合は、次を実行します。
$ cake schema generate
次のような選択肢が表示されます:
Generating Schema...
Schema file exists.
[O]verwrite
[S]napshot
[Q]uit
Would you like to do? (o/s/q)
s] (snapshot) を選択すると、バージョンアップ用の schema.php が生成されます。schema.php がある場合は、schema_2.php などが生成されます。いつでも次のように実行することでこれらのスキーマファイルをリストアすることができます:
$ cake schema run update -s 2
2
は実行したいスナップショットの番号です。スキーマシェルはプロンプトを表示し、
ALTER
ステートメントを実行するか確認します。その際に既存のデータベースと実行するスキーマファイルの違いを表示します。
コマンドに -dry
を指定することで、dyr run 実行することができます。