Laravel update model with unique validation rule for attribute Laravel update model with unique validation rule for attribute php php

Laravel update model with unique validation rule for attribute


Append the id of the instance currently being updated to the validator.

  1. Pass the id of your instance to ignore the unique validator.

  2. In the validator, use a parameter to detect if you are updating or creating the resource.

If updating, force the unique rule to ignore a given id:

//rules'email' => 'unique:users,email_address,' . $userId,

If creating, proceed as usual:

//rules'email' => 'unique:users,email_address',


Another elegant way...

In your model, create a static function:

public static function rules ($id=0, $merge=[]) {    return array_merge(        [            'username'  => 'required|min:3|max:12|unique:users,username' . ($id ? ",$id" : ''),            'email'     => 'required|email|unique:member'. ($id ? ",id,$id" : ''),            'firstname' => 'required|min:2',            'lastname'  => 'required|min:2',            ...        ],         $merge);}

Validation on create:

$validator = Validator::make($input, User::rules());

Validation on update:

$validator = Validator::make($input, User::rules($id));

Validation on update, with some additional rules:

$extend_rules = [    'password'       => 'required|min:6|same:password_again',    'password_again' => 'required'];$validator = Validator::make($input, User::rules($id, $extend_rules));

Nice.


Unique Validation With Different Column ID In Laravel

'UserEmail'=>"required|email|unique:users,UserEmail,$userID,UserID"