Laravel update model with unique validation rule for attribute
Append the id
of the instance currently being updated to the validator.
Pass the
id
of your instance to ignore the unique validator.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"