Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

tehseen's avatar

Email validation on user email update.

Validation not working when i update the user email it accept the dublicate email that already exist in the table.

public function UpdateAuthUserEmail(Request $request) {
        $user = Auth::user();
        $this->validate($request, [
            'email' => 'required|string|email|max:255|unique:users,email,'.$user->id,
        ]);
        $user = User::find($user->id);  
        $user->email = $request->email;
        $user->save();
        Session::flash('success', 'User Email Updated');
        return redirect()->back();
}

Please advice.

0 likes
27 replies
Snapey's avatar

please format your code with three backticks ``` on a line before and after the code block

tehseen's avatar

@Snapey thanks for figure out about format the code. I also mentioned you in my 2nd question for help I do not figure out about the user and usermeta relationship please also help me there.

Regards Thanks in advance.

Snapey's avatar

Is it you updating the user email or is it the user updating their own email?

The code you show will only work for the user updating their own email address

tehseen's avatar

yes in my account user updating there email but this could for now because same i was checking the same user email was validate but.

tehseen's avatar

Now the issue is i cannot figure out how to update the auth user billing information.

$user = Auth::user();

        $this->validate($request, [
            'fname' => 'required',
            'lname' => 'required',
            'address1' => 'required|string',
            'address2' => 'required|string',
            'zip' => 'required|regex:/\b\d{5}\b/',
            'state' => 'required|string',
            'city' => 'required|string',
        ]);

        $usermeta = User::find($user->id);

        $usermeta->fname = $request->input('fname');
        $usermeta->lname = $request->input('lname');
        $usermeta->address1 = $request->input('address1');
        $usermeta->address2 = $request->input('address2');
        $usermeta->zip = $request->input('zip');
        $usermeta->state = $request->input('state');
        $usermeta->city = $request->input('city');

        Auth::user()->UserMeta()->save($usermeta); 

It ask me Column not found:

Snapey's avatar

$usermeta = User::find($user->id);

You are finding the User model not the Usermeta model

$usermeta = $user->usermeta;

and when saving, just save usermeta

$usermeta->save();

tehseen's avatar

but i need to update now insert a new record is it work in that case ?

Snapey's avatar

Yes, get current user meta for user and change the fields and save. It does not need to be re-associated with the User

See my update to previous answer

tehseen's avatar

i update as per your code but it says

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'fname' in 'field list' (SQL: updateuserssetupdated_at= 2018-09-29 08:32:16,fname= Tehseen Billing,lname= mushtaq,address1= tehseen mushtaq address1,address2= tehseen mushtaq address2,zip= 12344,state= california,city= rawalpindi whereid= 1)

Why it shows the users table ? i need to update the user meta of login user only ?

Snapey's avatar

because you get User model. as I said.

tehseen's avatar
    $usermeta = User::find($user->id);

        $usermeta->fname = $request->input('fname');
        $usermeta->lname = $request->input('lname');
        $usermeta->address1 = $request->input('address1');
        $usermeta->address2 = $request->input('address2');
        $usermeta->zip = $request->input('zip');
        $usermeta->state = $request->input('state');
        $usermeta->city = $request->input('city');

        $usermeta = $user->usermeta;
        $usermeta->save();

is that your mean @Snapey

but id declare the use App\UserMeta; above my controller

Snapey's avatar

$usermeta = User::find($user->id);

gets user

change to

$usermeta = $user->usermeta;

REMOVE the line you have added before save

tehseen's avatar

Still got error with this code column not found :'(

$user = Auth::user();

        $this->validate($request, [
            'fname' => 'required',
            'lname' => 'required',
            'address1' => 'required|string',
            'address2' => 'required|string',
            'zip' => 'required|regex:/\b\d{5}\b/',
            'state' => 'required|string',
            'city' => 'required|string',
        ]);

        $usermeta = User::find($user->id);

        $usermeta->fname = $request->input('fname');
        $usermeta->lname = $request->input('lname');
        $usermeta->address1 = $request->input('address1');
        $usermeta->address2 = $request->input('address2');
        $usermeta->zip = $request->input('zip');
        $usermeta->state = $request->input('state');
        $usermeta->city = $request->input('city');

        $usermeta->save();
tehseen's avatar

This is the whole method to allow login user to updater their billing information.

public function UpdateAuthUserBilling(Request $request) {

        $user = Auth::user();

        $this->validate($request, [
            'fname' => 'required',
            'lname' => 'required',
            'address1' => 'required|string',
            'address2' => 'required|string',
            'zip' => 'required|regex:/\b\d{5}\b/',
            'state' => 'required|string',
            'city' => 'required|string',
        ]);

        $usermeta = User::find($user->id);

        $usermeta->fname = $request->input('fname');
        $usermeta->lname = $request->input('lname');
        $usermeta->address1 = $request->input('address1');
        $usermeta->address2 = $request->input('address2');
        $usermeta->zip = $request->input('zip');
        $usermeta->state = $request->input('state');
        $usermeta->city = $request->input('city');

        $usermeta->save();

    }
Snapey's avatar
        $usermeta = $user->usermeta;

        $usermeta->fname = $request->input('fname');
        $usermeta->lname = $request->input('lname');
        $usermeta->address1 = $request->input('address1');
        $usermeta->address2 = $request->input('address2');
        $usermeta->zip = $request->input('zip');
        $usermeta->state = $request->input('state');
        $usermeta->city = $request->input('city');

        $usermeta->save();

tehseen's avatar

Method Illuminate\Database\Eloquent\Collection::save does not exist.

is that something with relationship issue ? with user and usermeta table ?

Snapey's avatar

What is the name of your relationship?

tehseen's avatar

in my UserMeta model i have

public function user() {
        return $this->belongsTo('App\User');
    }
}

and in my User model

public function UserMeta() {
        return $this->hasMany('App\UserMeta');
    }

and the user_id is the FKey in my user_metas table

Snapey's avatar
Snapey
Best Answer
Level 122

Its good practice to stick with conventions. Relationships are normally lowercase

Change your code;

        $usermeta = $user->UserMeta;

        $usermeta->fname = $request->input('fname');
        $usermeta->lname = $request->input('lname');
        $usermeta->address1 = $request->input('address1');
        $usermeta->address2 = $request->input('address2');
        $usermeta->zip = $request->input('zip');
        $usermeta->state = $request->input('state');
        $usermeta->city = $request->input('city');

        $usermeta->save();
tehseen's avatar

still get this error

Method Illuminate\Database\Eloquent\Collection::save does not exist.

with below code

public function UpdateAuthUserBilling(Request $request) {

        $user = Auth::user();

        $this->validate($request, [
            'fname' => 'required',
            'lname' => 'required',
            'address1' => 'required|string',
            'address2' => 'required|string',
            'zip' => 'required|regex:/\b\d{5}\b/',
            'state' => 'required|string',
            'city' => 'required|string',
        ]);

        $usermeta = $user->UserMeta;

        $usermeta->fname = $request->input('fname');
        $usermeta->lname = $request->input('lname');
        $usermeta->address1 = $request->input('address1');
        $usermeta->address2 = $request->input('address2');
        $usermeta->zip = $request->input('zip');
        $usermeta->state = $request->input('state');
        $usermeta->city = $request->input('city');

        $usermeta->save();

    }
Snapey's avatar

OK, I looked at your relationship. Why can a user haveMany user meta?

This should be a hasOne ?

tehseen's avatar

Yes the user have only one entry you are right so if i change this to hasOne and run the code is that working ?

tehseen's avatar

Yes its working now and one important thing i remember in my mind i have the usermeta table name like user_metas and model name is UserMeta is this convention is right according to laravel or not?

Snapey's avatar

Conventions

model: UserMeta or Usermeta

table: user_metas or usermetas

relationship to user: usermeta

tehseen's avatar

So in my case i am right ?

Yes or no ?

Snapey's avatar

just your relationship name should be usermeta not UserMeta

public function usermeta() {
        return $this->hasMany('App\UserMeta');
    }

Please or to participate in this conversation.