i cant get option value for update in laravel

Viewed 693

I can't get option value in edituser for update in laravel controller.

Error message:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'role_id' cannot be null (SQL: update `users` set `name` = Alex, `email` = Ceferov23@gmail.com, `role_id` = ?, `users`.`updated_at` = 2020-08-17 04:23:45 where `id` = 22)

edit blade

 <select class="mdb-select md-form">
            <option>--Səlahiyyət seç---</option>
            @foreach ($roles as $role)
            <option name="role" value="{{$role->role_id}}">{{$role->name}}</option>
            @endforeach
        </select>

my controller:

public function edit(){

    $users=User::all();
    $roles=Role::all();
    return view('edit',compact('users','roles'));
}

public function edituser(Request $request,$id) {

   $user=User::find($id);
   $user->name=$request->name;
   $user->email=$request->email;
   $user->role_id=$request->role;

   $user->save();

}
2 Answers

You need to add name="role" in the select tag. With your option value it should be id instead of role_id. make your code as below.

<select name="role" class="mdb-select md-form">
    <option>--Səlahiyyət seç---</option>
    @foreach ($roles as $role)
    <option  value="{{$role->id}}">{{$role->name}}</option>
    @endforeach
</select>

Your problem seems to be in edit blade:

 <select class="mdb-select md-form">
      <option>--Səlahiyyət seç---</option>
      @foreach ($roles as $role)
      <option name="role" value="{{$role->role_id}}">{{$role->name}}</option>
      @endforeach
 </select>

Since in your select tag you have not added any name attribute so in $request, there is no value corresponding to $request->role.

Replace your code with below:

<select name="role" class="mdb-select md-form">
          <option>--Səlahiyyət seç---</option>
          @foreach ($roles as $role)
          <option name="role" value="{{$role->role_id}}">{{$role->name}}</option>
          @endforeach
 </select>
Related