[CakePHP3] Migrationで特定のカラムに対し、UNIQUE制約を設定する方法

2020/02/16

author

masyus

CakePHP3のMigrationはデータベースのテーブルを作成したり、カラム追加やインデックス付与などができます。今回はその中でもUNIQUE制約(つまりUNIQUE INDEX) を追加/削除する方法ついて紹介します。検証したCakePHPのバージョンは3.6.13。PHPは7.3、MySQLは5.7.26です。

addIndex()とremoveIndex()でUNIQUE制約の追加/削除が可能

結論から書きますと、addIndex()removeIndex()でUNIQUE制約の追加/削除が可能です。具体的には下記のようになります。

<?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引数にはさらに、どんなインデックスを貼るのかを配列の中で指定することが可能です(ここでUNIQUE制約を指定できます)。

ちなみに第2引数でnameの指定を無くしますと、インデックス名は自動的にカラム名と同じ名前が付けられます。

参考