※こちらは旧サイトです(新サイトはこちら

Cake3のMigrationsについて調べたのでメモ

2017-02-16 11:44:53

cake2系にあった、cake schemaコマンドは、cake3系ではなくなったらしいので、色々調べたメモ

cake3からは、Migrationsを使うのがセオリーぽい

Migration関係のコマンド

// migration作成
$ ./bin/cake bake migration [Migration名]

// migration実行
$ ./bin/cake migrations migrate

Migrationファイルの記述と実行

// 作ったMigration
class Test extends AbstractMigration
{
    public function change()
    {
        $table = $this->table('tests');

        // テーブル定義
        $table->addColumn('title', 'string', [
            'default' => null,
            'limit' => 255,
        ]);
        $table->addColumn('body', 'text', [
            'default' => null,
        ]);
        $table->addColumn('created', 'datetime', [
            'default' => null,
            'null' => false,
        ]);
        $table->addColumn('modified', 'datetime', [
            'default' => null,
        ]);

        $table->create();

        // id を unsigned に変更
        $table->changeColumn('id', 'integer', [
            'identity' => true,
            'signed' => false,
        ]);
    }
}

// できたテーブル
| tests | CREATE TABLE `tests` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`body` text NOT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

Seed関係のコマンド

// seed作成
$ ./bin/cake bake seed [Model名]

// seed実行
$ ./bin/cake migrations seed

Seedファイルの記述と実行

// 作ったSeed
class ArticlesSeed extends AbstractSeed
{
    /**
     * Run Method.
     *
     * Write your database seeder using this method.
     *
     * More information on writing seeds is available here:
     * http://docs.phinx.org/en/latest/seeding.html
     *
     * @return void
     */
    public function run()
    {
        $data = [
            ['title' =>  'タイトル', 'body' => 'これは、記事の本文です', 'created' => date("Y-m-d H:i:s",time()), 'modified' => date("Y-m-d H:i:s",time())],
            ['title' =>  'またタイトル', 'body' => 'そこに本文が続きます', 'created' => date("Y-m-d H:i:s",time()), 'modified' => date("Y-m-d H:i:s",time())],
        ];

        $table = $this->table('articles');
        $table->insert($data)->save();
    }
}

// 入ったデータ
MySQL [cake3]> select * from articles;
+----+--------------------+-----------------------------------+---------------------+---------------------+
| id | title              | body                              | created             | modified            |
+----+--------------------+-----------------------------------+---------------------+---------------------+
|  1 | タイトル           | これは、記事の本文です            | 2017-02-16 16:14:13 | 2017-02-16 16:14:13 |
|  2 | またタイトル       | そこに本文が続きます              | 2017-02-16 16:14:13 | 2017-02-16 16:14:13 |
+----+--------------------+-----------------------------------+---------------------+---------------------+
2 rows in set (0.00 sec)