我正在開發一個 laravel 8 應用程式,并使用spatie/laravel-permission來獲取角色和權限。在管理頁面上,我顯示了管理員可以對其進行 CRUD 操作的所有用戶。用戶串列還包括他自己的管理員帳戶。
我遇到的問題是更新用戶詳細資訊時。管理員可以通過驗證成功更新其他用戶的用戶帳戶資訊。但是,如果管理員嘗試編輯他自己的管理員帳戶的資訊,驗證通過但我收到一個 SQL 錯誤:
完整性約束違規:1062 鍵“users_email_unique”的重復條目“[email protected]”
請參閱下面我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 重復電子郵件錯誤。
非常感謝我能得到的任何幫助
uj5u.com熱心網友回復:
您沒有確定哪個列應該是唯一的以忽略他自己。
將您的電子郵件驗證行更改為:
'email' => ['required', 'email', Rule::unique('users', 'email')->ignore($user->id)],
不要忘記把它放在你的代碼的頂部use Illuminate\Validation\Rule;。
uj5u.com熱心網友回復:
錯誤正在通過驗證規則,但在保存規則時失敗。這是因為您沒有正確獲取用戶。find()自動獲取第一條記錄,因此first()不需要,實際上可能是拉錯了帳戶。當我User::find(3)->first()在本地嘗試時,我得到的是用戶 1 而不是用戶 3。first()從您的通話中洗掉。
$updatedUser = User::find($user->id);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/322934.html
