简体   繁体   中英

Laravel, How to update user profile and check if phone number is duplicated

I'm using ajax to update user profile in the same page, I dont have any problem with this, as the user is logged in, then the controller check the user id from the Auth as in the code below, but in registration page its check if the phone number is duplicated but in update I dont know how to do this and also to ignore update for the current user if he didnt update his phone number!

Controller:

 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(
   ));
  }
   }

You need to validate the request before save to database

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;
  }

I hone it helps you.

You can actually validate data before you get to your controller. It's much safer, and you will have a cleaner code. First, create your custom request validation:

php artisan make:request UserRequest

This will create an empty UserRequest class, where you can validate your data:

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.',
        ];
    }
}

All you have to do now, is import this custom validation inside your controller:

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;
  }

Let me know if this helped you, or if you get any errors or anything like that.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM