在更新“用户”表时,我希望EditUserRequest表单检出忽略当前电子邮件,因为它已经存在。 代码规则:
public function rules()
{
return [
'username' => 'required|max:200',
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
'pass1' => 'required|min:6',
'pass2' => 'same:pass1',
];
}
代码UserController:
public function postEdit($id,EditUserRequest $request)
{
$user = User::find($id);
$user->name = $request->username;
$user->email = $request->email;
$user->password = Hash::make($request->pass1);
$user->level = $request->get('cbadmin',0);
$user->save();
return view('admin.edit-user')->with('success','Sửa thành công!');
}
此行:'email' => 'required|email|unique:users,email'
将检查电子邮件是否存在。但是,我需要更新的默认电子邮件已经存在。我读过:https://laravel.com/docs/5.6/validation#rule-unique。但是我不明白如何解决这个问题
答案 0 :(得分:2)
public function rules()
{
return [
'username' => 'required|max:200',
'email' => 'required|email|unique:users,email,'.request()->user()->id,
'pass1' => 'required|min:6',
'pass2' => 'same:pass1',
];
}
您可以将第三个参数作为id传递。
希望这会有所帮助。
答案 1 :(得分:1)
您可以通过使用Rule Facade来做到这一点。
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
编辑
如果您使用函数来验证输入,则可以这样操作:
protected function yourValidatorName(array $data, $id)
{
return Validator::make($data, [
'username' => 'required|max:200',
'email' => [
'required',
Rule::unique('users')->ignore($id),
],
'pass1' => 'required|min:6',
'pass2' => 'same:pass1',
]);
}
然后
public function postEdit($id, EditUserRequest $request)
{
$accountValidate = $this->yourValidatorName($request->all(), $id);
if (!$accountValidate->fails())
{
// success
}
else
{
// failed
}
}
答案 2 :(得分:0)
您能告诉我您去postEdit
的路线吗?
例如,这是您的路线:
Route::put('users/{user_id_sample}', 'UserController@postEdit');
您可以执行以下操作:
public function rules()
{
return [
'username' => 'required|max:200',
'email' => [
'required',
Rule::unique('users')->ignore($this->route('user_id_sample')),
],
'pass1' => 'required|min:6',
'pass2' => 'same:pass1',
];
}
答案 3 :(得分:0)
我不确定您的路由参数名称,因为您的路由未包含在帖子中,因此我假设控制器方法上的$id
意味着有一个名为id
的路由参数。 / p>
'email' => [
'required',
Rule::unique('users')->ignore($this->route('id')),
],
这将使用route参数中的id
,假设它被命名为id
。这将告诉规则忽略此电子邮件字段上对此特定用户ID的唯一检查。