Laravel 5.4 验证请求,如何处理更新时的唯一验证?
Laravel 5.4 Validation Request , How to handle unique validation on update?
我有一个用户 table,它对电子邮件和用户名有唯一的验证规则。当我尝试更新时不要忽略唯一验证。请在下面查看我的代码。
UserRequest.php
public function rules()
{
return [
'name' => 'required',
'mobile' => 'required',
'email' => 'required|unique:users,email'.$id,
'usercategory' => 'required',
'username' => 'required|unique:users,username'.$id,
];
}
如果您验证更新,则需要跳过 id
,如下所示
public function rules($id='')
{
$id = $id ? ','.$id.',id':'';
return [
'name' => 'required',
'mobile' => 'required',
'email' => 'required|unique:users,email'.$id,
'usercategory' => 'required',
'username' => 'required|unique:users,username'.$id,
];
}
在 Laravel docs 中,您在 unique
规则
中提供了 3rd
和 4th
参数
unique:table,column,except,idColumn
你可以使用这样的东西:
$id = $this->isMethod('put') ? ',' . auth()->id() : '';
假设您使用 put
方法进行更新
在 return
行之前
请试试这个
public function rules()
{
$id = $this->request->get('id') ? ',' . $this->request->get('id') : '';
return [
'name' => 'required',
'mobile' => 'required',
'email' => 'required|unique:users,email'.$id,
'usercategory' => 'required',
'username' => 'required|unique:users,username'.$id,
];
}
在 laravel 5.5 你应该这样做:
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
查看 laravel 有关 rule-unique 的文档。
其他人遇到了这个问题:
public function rules()
{
return [
'name' => 'required',
'mobile' => 'required',
'email' => 'required|unique:users,email'.$this->user->id,
'usercategory' => 'required',
'username' => 'required|unique:users,username'.$this->user->id,
];
}
我用这个解决了这个问题:
public function rules()
{
$id = $this->user->id ?? null;
return [
"name" => "required",
"mobile" => "required",
"email" => "required|unique:users,email, $id",
"usercategory" => "required",
"username" => "required|unique:users,username, $id",
];
}
请注意,对于除User模型以外的其他模型,$this->user->id
中的user将是小写的模型名称
我有一个用户 table,它对电子邮件和用户名有唯一的验证规则。当我尝试更新时不要忽略唯一验证。请在下面查看我的代码。
UserRequest.php
public function rules()
{
return [
'name' => 'required',
'mobile' => 'required',
'email' => 'required|unique:users,email'.$id,
'usercategory' => 'required',
'username' => 'required|unique:users,username'.$id,
];
}
如果您验证更新,则需要跳过 id
,如下所示
public function rules($id='')
{
$id = $id ? ','.$id.',id':'';
return [
'name' => 'required',
'mobile' => 'required',
'email' => 'required|unique:users,email'.$id,
'usercategory' => 'required',
'username' => 'required|unique:users,username'.$id,
];
}
在 Laravel docs 中,您在 unique
规则
3rd
和 4th
参数
unique:table,column,except,idColumn
你可以使用这样的东西:
$id = $this->isMethod('put') ? ',' . auth()->id() : '';
假设您使用 put
方法进行更新
在 return
请试试这个
public function rules()
{
$id = $this->request->get('id') ? ',' . $this->request->get('id') : '';
return [
'name' => 'required',
'mobile' => 'required',
'email' => 'required|unique:users,email'.$id,
'usercategory' => 'required',
'username' => 'required|unique:users,username'.$id,
];
}
在 laravel 5.5 你应该这样做:
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
查看 laravel 有关 rule-unique 的文档。
其他人遇到了这个问题:
public function rules()
{
return [
'name' => 'required',
'mobile' => 'required',
'email' => 'required|unique:users,email'.$this->user->id,
'usercategory' => 'required',
'username' => 'required|unique:users,username'.$this->user->id,
];
}
我用这个解决了这个问题:
public function rules()
{
$id = $this->user->id ?? null;
return [
"name" => "required",
"mobile" => "required",
"email" => "required|unique:users,email, $id",
"usercategory" => "required",
"username" => "required|unique:users,username, $id",
];
}
请注意,对于除User模型以外的其他模型,$this->user->id
中的user将是小写的模型名称