0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravelのuniqueバリデーションで新規登録と更新で挙動を変える

Posted at

やりたいこと

Laravelバリデーションのuniqueについて、新規登録時と更新時で挙動を変えたい。
詳細は下記。

対象

  • 会社テーブル(companies)の会社名カラム(name)

条件

  • 新規登録時
    • すでに登録されている会社名と同じものは登録できないようにする
    • 論理削除されたものは対象外
  • 更新時
    • すでに登録されている会社名と同じものは登録できないようにする
    • 論理削除されたものは対象外
    • 自分自身(今更新しようとしているデータ)はunique除外
      • 会社名以外の項目を更新した時にバリデーションがかかると更新ができないため

実装

カスタムリクエストで書いていきます。

app/Http/Requests/CompanyRequest.php

// rulesメソッドだけ抜き取り
public function rules()
{
    $companyId = (int)$this->route('company');
    return [
        'name' => ['required', Rule::unique('companies')->ignore($companyId)->whereNull('deleted_at')],
        'post_code' => ['required'],
        'address' => ['required'],
    ];
}

$this->route('company')companyは、ルーティングで設定しているルートパラメータの値です。

routes/web.php

Route::resource('/company', CompanyController::class)->except('show');

上記の場合、リソースコントローラーを使用しているので、ルートパラメータはcompanyとなります。

※リソースコントローラーについては下記をご確認ください。
https://readouble.com/laravel/9.x/ja/controllers.html

論理削除されたものを対象外にするのは、->whereNull('deleted_at')の部分。

以上!
自分用のメモですが、誰かの参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?