LoginSignup
12
12

More than 5 years have passed since last update.

CakePHP 2系のCakeDC Migrationsプラグインのマイグレーションファイルの作成について

Last updated at Posted at 2015-12-16

マイグレーションファイルの作成

データベースの更新サイクルについて

 CakeDC Migrationsプラグインを利用したデータベースの更新サイクルは、次の二つがあります。

  1. Auto-Migration Files

     データベースは手動で更新し、更新した内容をもとに自動的にマイグレーションファイルを作成する。
     この場合、データベースは手動で更新しているので、自分ではマイグレーションファイルを使いません。作成したマイグレーションファイルは、gitでコミットし、他の開発者が使います。
     扱えるのは、テーブル情報のみ(カラムやインデックスなど)です。レコードは扱えません。

  2. Manually Creating Migration

     空のマイグレーションファイルを作成し、更新したいデータベースの作業を自分で記述する。マイグレーションファイルを適用して、データベースを更新する。
     この場合、空のマイグレーションファイルに、更新時(up)の手続きと、ロールバック時(down)の手続きを記述します。また、beforeとafterメソッドに手続きを記述することで、レコードの追加やデータの変更(新しく出来たカラムに初期値を入れるなど)なども可能です。レコードの追加は、基本的にモデルを通して行います。

Auto-Migration Files

  1. もしまだやっていなければ、最初のマイグレーションを行います。

    $ Console/cake Migrations.migration run reset
    
  2. 次に、現在のデータベースの状況に対応したSchemaファイルを作成します。

    $ cake schema generate -f  
    

    (スキーマファイルの作り方を尋ねられたら、既存のスキーマファイルを上書きするのであればOverwriteを選択します。Snapshotでも問題ないかは未確認)

    オプションの"-f"は、モデルがないテーブルについてもスキーマを作成する場合につけます。

  3. この状態で、SQLを使って、テーブルの追加、カラムの変更などを行います。

  4. その後、

    $ Console/cake Migrations.migration generate -f
    

    で、新しいマイグレーションファイルを作成します。
    オプションの"-f"は、モデルがないテーブルについてもマイグレーションファイルを作成する場合につけます。

    Do you want compare the schema.php file to the database? (y/n)
    

    と尋ねられたらyと答えて下さい。これで、マイグレーションファイルが出来ました。この新しいマイグレーションファイルに合わせて、スキーマファイルを更新するか尋ねられるので、更新しない(Quit)か、上書き(Overwrite)してください。

    保存時の名前は適当につけてください。ファイル名は、入力した名前の前に、現在のタイムスタンプが付きます。

Manually Creating Migration

  1. もしまだやっていなければ、最初のマイグレーションを行います。

    $ Console/cake Migrations.migration run reset
    
  2. 空のマイグレーションファイルを作成します。

    $ Console/cake Migrations.migration generate  
    

    ここで

    Do you want compare the schema.php file to the database? (y/n)
    

    と尋ねられたらnと答えて下さい。これで、マイグレーションファイルが出来ました。

  3. マイグレーションファイルを編集してください。たとえば、テーブルを作るのであれば、

    'up' => array(
        'create_table' => array(
            'categories' => array(
                'id' => array(
                'type'    =>'string',
                'null'    => false,
                'default' => null,
                'length'  => 36,
                'key'     => 'primary'
            ),
            'name' => array(
                'type'    =>'string',
                'null'    => false,
                'default' => null
            ),
            'indexes' => array(
                'PRIMARY' => array(
                    'column' => 'id',
                    'unique' => 1
                )
            )
        )
    )
    

    となります。その他の記述法については、
    https://github.com/CakeDC/migrations/blob/master/Docs/Documentation/Migrations.md
    を参考にしてください。
    保存時の名前は適当につけてください。ファイル名は、入力した名前の前に、現在のタイムスタンプが付きます。

  4. マイグレーションファイルが出来たら、マイグレーションファイルを実行します。

    $ Console/cake Migrations.migration run
    

    一つずつマイグレーションファイルを適用する場合、runではなくupを使います。

その他

現在のマイグレーションの状態は

$ Console/cake Migrations.migration status

で確認できます。

参考サイト

ドキュメント
https://github.com/CakeDC/migrations/tree/master/Docs/Documentation

チュートリアル
https://github.com/CakeDC/migrations/blob/master/Docs/Tutorials/Quick-Start.md

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12