1

In profile.blade, while updating the inputs in the profile getting Error The phone has already been taken.

Controller:

public function profileUpdate(Request $request)
{
    $user = Auth::user();

    $messages = [
        'user_name.required'  => __('The User name field is required.'),
        'last_name.required'  => __('The Last Name field is required.'),
        'first_name.required' => __('The First Name field is required.'),
        'phone.required'      => __('The Phone field is required.'),
    ];
    $request->validate([
        'first_name' => 'required|max:255',
        'last_name'  => 'required|max:255',
        'email'      => [
            'required',
            'email',
            'max:255',
            Rule::unique('users')->ignore($user->id)
        ],
        'user_name' => [
            'required',
            'max:255',
            'min:4',
            'string',
            'alpha_dash',
            Rule::unique('users')->ignore($user->id)
        ],
        'phone' => [
            'required',
            'unique:users',
            'min:10',
            'numeric',
            Rule::unique('users')->ignore($user->id)
        ],
    ], $messages);

    $input = $request->except('bio');

    $user->fill($input);
    $user->bio = clean($request->input('bio'));
    $user->birthday = date("d-m-Y", strtotime($user->birthday));
    $user->user_name = Str::slug($request->input('user_name'), "_");
    $user->save();

    return redirect()->back()->with('success', __('Update successfully'));
}

In the View blade:

<div class="form-group">
    <label>{{ __("Phone Number") }}</label>
    <input type="text" value="{{ old('phone',$dataUser->phone) }}" name="phone" placeholder="{{ __('Phone Number') }}" class="form-control">
    <i class="fa fa-phone input-icon"></i>
</div>
<div class="form-group">
    <label>{{ __("Birthday") }}</label>
    <input type="text" value="{{ old('birthday',$dataUser->birthday ? display_date($dataUser->birthday) : '') }}" name="birthday" placeholder="{{ __('Birthday') }}" class="form-control date-picker">
    <i class="fa fa-birthday-cake input-icon"></i>
</div>
<div class="form-group">
    <label>{{ __("About Yourself") }}</label>
    <textarea name="bio" rows="5" class="form-control">{{ old('bio', $dataUser->bio) }}</textarea>
</div>

If the Phone is already saved and no change is done with it, the error (The phone has already been taken) is thrown.

need help to resolve the problem,

Thanks

1 Answer 1

2

You're repeating the unique rule in phone.

'phone' => [
    'required',
    'unique:users', // Remove this line.
    'min:10',
    'numeric',
    Rule::unique('users')->ignore($user->id)
],

unique:users is the same as Rule::unique('users'). Since unique:users does not ignore $user->id, it throws the validation error.

0

Not the answer you're looking for? Browse other questions tagged or ask your own question.