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?

More than 1 year has passed since last update.

Laravelのバリデーションルールで新規登録時と更新時で分けたい

Last updated at Posted at 2022-06-06

やりたいこと1

保存(store)、更新時(update)のメソッドで、バリデーションルールを追加すると思いますが、uniqueなどを使うときに、新規登録時と更新時で振り分けたい場合があります。
その場合に、必須チェックなど共有したいルールもあり、別のバリデーションを用意するのはちょっとなぁ...というときに使えます。

現在のルーティングによって分岐する方法


public function rules() {
    $route = $this->route()->getName();

    \Log::info($route);
}

user.storeなどが返ってきます。

フォームの入力値を取得して分岐する方法


public function rules() {
    $postId = $this->id;
    $userId = $this->user_id;
}


$thisで取れます!
更新時のみidがあるという作りであれば、こちらで分岐してもよいと思います。

やりたいこと2

テーブル内で名前などを一意にしたい
やりたいこと1の分岐と組み合わせて使います。

新規登録時は、他のレコードと重複していてはいけない。
更新時は、自分のレコードとは重複していていいが、他のレコードと重複していてはいけない。
かつ、ソフトデリートも考慮。

<?php
public function rules()
{
        if(isset($this->seminarId)) {
            $countRule = Rule::unique('seminars', 'count')->whereNull('deleted_at')->whereNot('id', $this->seminarId);
        } else {
            $countRule = Rule::unique('seminars', 'count')->whereNull('deleted_at');
        }
}

$rules = [
            'count' => ['required', 'numeric', $countRule],
         ];
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?