🎃

メールアドレスのユニーク制約を外したい(laravel)

2021/09/24に公開

Laravelで後々になってメールアドレスのユニーク制約を外したい場合がありました。

調べていくとユニーク制約を外す方法が普通にありました。Laravelなんでもできるな。

その方法をお伝えする前に、Laravelがつけているそれぞれのインデックス名の規則性をお伝えします。
制約を解除するためにはそのインデックス名を指定してしてあげる必要があります。

'users_id_primary' // 主キー
'users_email_unique' // ユニークキー
'users_name_index' // 基本インデックス
'users_location_spatialindex' // 空間インデックス

今回はユニーク制約を外したいので、 テーブル名_カラムめい_unique という規則性のもとユニーク制約を解除していきたいと思います。

まずはユニーク制約を解除するた目のマイグレーションファイルを作成します。

php artisan make:migration drop_unique_constraint_to_users_email --table="users"

マイグレーションファイルの中身はこのようにします。 dropUnique とか、ユニーク制約をはずすためのメソッドが用意されているんですね。すごい。

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class DropUniqueConstraintToUsersEmail extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropUnique('users_email_unique');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->unique('email');
        });
    }
}

これでマイグレーションを実行するだけで完成です!

php artisan migrate

Discussion