PHP
cakephp3

cakePHP3でbake migrate

More than 3 years have passed since last update.

cakePHP3はPhinxというマイグレーションライブラリを使用しています。

とりあえず、DBには何もテーブルが作られていないという前提で、

./bin/cake bake migration MigrationName

というbakeコマンドを叩くと、MigrationNameがついたファイルが、config/Migrationsの下に作成されます。

ファイル名は、日付_migration_name.php。

初期状態だと、中身は下記です。


日付_migration_name.php

<?php

use Phinx\Migration\AbstractMigration;

class MigrationName extends AbstractMigration
{
/**
* Change Method.
*
* More information on this method is available here:
* http://docs.phinx.org/en/latest/migrations.html#the-change-method
* @return void
*/

public function change()
{
}
}


ここに、Phonxのドキュメントにあるコードをモジって書いてみます。


日付_migration_name.php

    public function change()

{
$table = $this->table('tags');
$table->addColumn('tag_name', 'string')
->create();

$refTable = $this->table('tag_relationships');
$refTable->addColumn('tag_id', 'integer')
->addForeignKey('tag_id', 'tags', 'id')
->create();
}


で、マイグレーションを実行します。

./bin/cake migrations migrate

エラーが出ずに、AllDoneと表示されれば成功です。

tagsとtag_relationshipsというテーブルが作成されていると思います。


おまけ

addForeignKeyをするときに、ちょっとハマりました。

ドキュメントには、array('delete'=> 'SET_NULL', 'update'=> 'NO_ACTION')というオプションを指定しているのですが、対象のカラム(id)はNULLを許可してないため、エラーになったのだと思います。