FormRequestでログインユーザーをユニークの対象外にする

PHPLaravel

FormRequestでは、rules()でリクエストの値に対してユニーク制約を設定できる。 例としてユーザー更新のリクエストを想定したUpdateUserRequestを定義する。

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class UpdateUserRequest extends FormRequest
{
    public function authorize()
    {
        return false;
    }

    public function rules()
    {
        return [
            'email' => 'sometimes|max:255|email|unique:users',
            'user_name' => 'sometimes|max:255|unique:users',
        ];
    }
}

上記のようにunique:テーブル名とすることでユニーク制約を設定できる。 リクエストのキーとカラム名が異なる場合はunique:テーブル名,カラム名とすればよい。

しかし、ログインユーザーの重複する値を許容する場合はこのルール設定だとユニーク制約が適用されて更新できない。 ログインユーザーの重複する値を許容する場合は以下のように記述することで対象外にできる。

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class UpdateUserRequest extends FormRequest
{
    public function authorize()
    {
        return false;
    }

    public function rules()
    {
        return [
            'email' => 'sometimes|max:255|email|unique:users,email,' . $this->user()->id,
            'user_name' => 'sometimes|max:255|unique:users,user_name,' . $this->user()->id,
        ];
    }
}

参考