CakePHP3でDBのテーブルを作成したりカラム追加ができるMigration。インデックスを付与する人も多いと思うが、今回はその中でもUNIQUE制約(つまりUNIQUE INDEX)を追加/削除する方法ついてメモを残しておく。検証したCakePHPのバージョンは3.6.13。DBはMySQL5.7.26。
UNIQUE制約はaddIndex(), removeIndex()で追加/削除が可能
実際にbakeで生成したMigrationファイルを見てもらったほうが手っ取り早い。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php use Migrations\AbstractMigration; class AlterOrderDetails20200216 extends AbstractMigration { public function up() { $table = $this->table('order_details'); $table->addIndex('order_id', ['name' => 'unique_order_id', 'unique' => true]); $table->update(); } public function down() { $table = $this->table('order_details'); $table->removeIndex('order_id', ['name' => 'unique_order_id']); $table->update(); } } |
こんな感じ。
addIndex(), removeIndex()の第1引数は対象カラムを指し、第2引数の中でインデックス名を指定できる。addIndex()の第2引数にはさらに、どんなインデックスを貼るのかを配列の中で指定可能。
ちなみに第2引数でnameの指定を無くすと、インデックス名は自動的にカラム名と同じ名前が付けられる。