【发布时间】:2021-12-05 11:42:45
【问题描述】:
我正在开发一个 laravel 8 应用程序,并使用 spatie/laravel-permission 获取角色和权限。在管理页面上,我显示了管理员可以对其进行 CRUD 操作的所有用户。用户列表还包括他自己的管理员帐户。
我遇到的问题是更新用户详细信息时。管理员可以通过验证成功更新其他用户的用户帐户信息。但是,如果管理员尝试编辑他自己的管理员帐户的信息,则验证通过但我收到 SQL 错误:
违反完整性约束:1062 Duplicate entry 'admin@email.com' 对于键“users_email_unique”
请参阅下面我的UserController update 方法,用于通过验证更新用户信息:
public function update(Request $request, User $user)
{
$edit_user_rules = array(
// ... other validation rules ...
//'email' => "required|email|unique:users,email,{{$user->id}}", //. auth()->user()->id,
'email' => ['required', 'string', 'email', Rule::unique('users')->ignore($user->id)],
// ... other validation rules ...
);
$validator = Validator::make($request->all(), $edit_user_rules);
if ($validator->fails()) {
Session::flash('failed', 'Failed to save User details!');
return redirect(route('editUser', ['user' => $user->id]))->withErrors($validator)->withInput();
} else {
$validated = $validator->validated();
$updatedUser = User::find($user)->first();
// ... other user fields ...
$updatedUser->username = $validated['username'];
$updatedUser->email = $validated['email'];
// ... other user fields ...
if ($updatedUser->save()) {
return redirect(route('allUsers'));
} else {
return redirect(route('allUsers')); // with errors
}
}
}
例如,我尝试在email 字段上使用不同的验证规则,
"required|email|unique:users,email,{{$user->id}}""required|email|unique:users,email," . auth()->user()->id
但没有一个有效。所以我使用验证Rule 来验证唯一的电子邮件字段。当我尝试更新其他用户的信息时它工作正常,但在更新管理员自己的帐户时收到 SQL 重复电子邮件错误。
如果我能得到任何帮助,我将不胜感激
【问题讨论】:
标签: php laravel validation duplicates