我正在使用ajax更新同一页面中的用户个人资料,对此我没有任何问题,因为用户已登录,然后控制器按照下面的代码从Auth中检查用户ID,但是在注册页面会检查电话号码是否重复,但是在更新中,我不知道该怎么做,如果当前用户没有更新电话号码,也将忽略当前用户的更新!
控制器:
public function update(Request $request)
{
$user_id=Auth::user()->id;
User::where('id', $user_id)->update([
'phone' => $request->phone,
'fname' => $request->fname,
'lname' => $request->lname
]);
return Response::json(array(
));
}
}
答案 0 :(得分:0)
您需要先验证请求,然后再保存到数据库
public function update(Request $request)
{
$user = Auth::user();
$request->validate([
// unique:table,column,except,idColumn
'phone' => 'unique:App\User,phone,' . $user->phone,
]);
$user_id=Auth::user()->id;
User::where('id', $user_id)->update([
'phone' => $request->phone,
'fname' => $request->fname,
'lname' => $request->lname
]);
return;
}
我认为它可以为您提供帮助。
答案 1 :(得分:0)
实际上,您可以在进入控制器之前验证数据。这要安全得多,而且您的代码更简洁。首先,创建您的自定义请求验证:
php artisan make:request UserRequest
这将创建一个空的UserRequest
类,您可以在其中验证数据:
class UserRequest extends FormRequest
{
public function authorize()
{
return true;
}
//Validate your data here
public function rules()
{
return [
'phone' => 'required|unique:users',
'fname' => 'required',
'lname' => 'required',
];
}
//Add custom message if validation fails
public function messages()
{
return [
'phone.required' => 'Phone is required.',
'phone.unique' => 'Phone number should be unique.',
'fname.unique' => 'First name is required.',
'lname.required' => 'Last name is required.',
];
}
}
您现在要做的就是在控制器中导入此自定义验证:
public function update(UserRequest $request)
{
$user_id = Auth::user()->id;
User::where('id', $user_id)->update([
'phone' => $request->phone,
'fname' => $request->fname,
'lname' => $request->lname
]);
return;
}
让我知道这是否对您有所帮助,或者您是否遇到任何错误或类似问题。