CakePHP3でunique制約を付けたい
データベース設計をしていてunique制約を付けたいカラムってありますよね。
例えばユーザー同士で被らせたくないメールアドレスだったり、場合によっては名前などもそうなると思います。
CakePHP3でできるunique制約の付け方を説明します。
(目次)
【自分の環境】
macOS Catalina
PHP7.4.2
CakePHP3.8
MAMP5.7
Apache2.2
MySQL5.7
マイグレーションファイルをいじればできる
マイグレーションファイルをいじります。
説明として妥当かどうか微妙ですが、ここで注意なのが、unique制約はインデックスということです。
$users_table->addIndex(['username', 'email'], ['unique' => true]);
上記はusernameカラムとemailカラムにunique制約を与えています。
上記のようにメソッド名は「addIndex()」となっています。
下記にマイグレーションファイルの例を示します。
config/Migrations/20210119102411_CreateUsers.phpファイル
public function change() { $table = $this->table('users'); $table->addColumn('name', 'string', [ 'default' => null, 'limit' => 255, 'null' => false, ]); $table->addColumn('mail', 'string', [ 'default' => null, 'limit' => 255, 'null' => false, ]); $table->addIndex('mail', ['unique' => true]); // ここを追加。 $table->create(); }
この例ではmailカラムにunique制約を付けています。
第1引数にカラム名を入れます。この例では「'mail'」の部分ですね。
ここには配列でも行けます。
第2引数には一律で「['unique' => true]」と入れればOKです。