CakePHP2 Schema,Migrations関連メモ

個人的にわすれるので。

スキーマ作成(※要-fオプション ModelクラスがなくてもSchemaへ反映してくれる)

$ ./Console/cake schema generate -f

Migration作成

$ ./Console/cake Migrations.migration run all -p Migrations

‘schema_migrations’テーブルができる。

変更を加える

テーブル追加など

Migrations実行

$ ./Console/cake Migrations.migration generate -f

実行すると

Cake Migration Shell
---------------------------------------------------------------
Do you want to compare the schema.php file to the database? (y/n)
[y] >

schema.phpと比較するかな? > y

---------------------------------------------------------------
Comparing schema.php to the database...
Do you want to preview the file before generation? (y/n)
[y] >

previewする? y

Please enter the descriptive name of the migration to generate:  
> add_newtable_and_newfields
Generating Migration...

説明する名前つけてなので変更した内容を記述 > add_newtable_and_newfields

Do you want to update the schema.php file? (y/n)
[y] >

スキーマupdate ? yes.

Welcome to CakePHP v2.6.12 Console
---------------------------------------------------------------
App : app
Path: /Users/taka/htdocs/bizmatchocvb/html/businessmatching/app/
---------------------------------------------------------------
Cake Schema Shell
---------------------------------------------------------------
Generating Schema...
Schema file exists.
 [O]verwrite
 [S]napshot
 [Q]uit
Would you like to do? (o/s/q)
[s] > o
Schema file: schema.php generated

上書き? yes で完了。

次回以降は、

$  ./Console/cake Migrations.migration generate -f

で良さそう。

変更内容の適用方法

$ ./Console/cake Migrations.migration run

とすると

Cake Migration Shell
---------------------------------------------------------------
Available migrations:
  [xxxxxxxxxxx] xxxxxxxxxxx_add_newtable_and_newfields
        not applied
---------------------------------------------------------------
Please choose which version you want to migrate to. [q]uit or [c]lean.  
> xxxxxxxxxxx

バージョンを聞いてくる。ので該当の xxxxxxxxxxx を入力して

---------------------------------------------------------------
Running migrations:
  [xxxxxxxxxxx] xxxxxxxxxxx_add_newtable_and_newfields
      > Creating table "bookmarks".
      > Creating table "likes".
      > Creating table "messages".
      > Creating table "notices".
      > Creating table "projects".
      > Adding field "newstype_id" to table "news".

---------------------------------------------------------------
All migrations have completed.

マスター系のテーブルに追加がある場合。

/Config/Migrations/以下のMigrationのプログラムに追記
‘up’した時にどうするかを追記。(‘down’のときも必要)

/**
 * After migration callback
 *
 * @param string $direction Direction of migration process (up or down)
 * @return bool Should process continue
 */
    public function after($direction) {
        if ($direction === 'up') {
            $Group = $this->generateModel('Group');
            $Group->save(array(
                'Group'=>array('name'=>'海外エージェント','key'=>'agent')
            ));
        }
        return true;
    }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です