Laravel 5.4 验证请求,如何处理更新时的唯一验证?
Posted
技术标签:
【中文标题】Laravel 5.4 验证请求,如何处理更新时的唯一验证?【英文标题】:Laravel 5.4 Validation Request , How to handle unique validation on update? 【发布时间】:2018-06-05 01:53:09 【问题描述】:我有一个用户表,其中有一个关于电子邮件和用户名的唯一验证规则。当我尝试更新时,不要忽略唯一验证。请在下面查看我的代码。
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
,它是从哪里来的?
你解决了吗?
【参考方案1】:
请试试这个
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,
];
【讨论】:
【参考方案2】:在 laravel 5.5 中你应该这样做:
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
查看关于 rule-unique 的 laravel 文档。
【讨论】:
【参考方案3】:如果您验证更新,则需要跳过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
【讨论】:
@Sandeep :您是否将$id
发送到规则函数?【参考方案4】:
你可以这样使用:
$id = $this->isMethod('put') ? ',' . auth()->id() : '';
假设您使用put
方法进行更新
在return
行之前
【讨论】:
【参考方案5】:其他人面临这个问题:
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,
];
【讨论】:
【参考方案6】:我用这个解决了这个问题:
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
中的用户将是小写的模型名称
【讨论】:
以上是关于Laravel 5.4 验证请求,如何处理更新时的唯一验证?的主要内容,如果未能解决你的问题,请参考以下文章