我有一个用户表,其中包含有关电子邮件和用户名的唯一验证规则。当我尝试更新时不忽略唯一验证。请参阅下面的代码。
UserRequest.php
public function rules()
{
return [
'name' => 'required',
'mobile' => 'required',
'email' => 'required|unique:users,email'.$id,
'usercategory' => 'required',
'username' => 'required|unique:users,username'.$id,
];
}
答案 0 :(得分:2)
请试试这个
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,
];
}
答案 1 :(得分:2)
在laravel 5.5中你应该这样做:
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
检查关于 rule-unique 的laravel文档。
答案 2 :(得分:0)
如果您确认更新,则需要跳过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中,您在3rd
规则
4th
和unique
参数
unique:table,column,except,idColumn
答案 3 :(得分:0)
您可以使用以下内容:
$id = $this->isMethod('put') ? ',' . auth()->id() : '';
假设您使用put
方法进行更新
在与return
答案 4 :(得分:0)
对于其他人来说,遇到此问题:
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,
];
}