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

m4martie's avatar

How to add role_id to user table

Hi, I'm new to laravel and stuck with this concept, should I make a pivot table or just lack some proper coding?

0 likes
13 replies
m4martie's avatar

My Role Model

class Role extends Model
{

    use SoftDeletes;

    protected $fillable = [
        'name', 'display_name', 'description',
    ];

    protected $dates = ['deleted_at'];
    
    public function users()
    {
        return $this->belongsToMany(User::class);
    }

    public function permissions()
    {
        return $this->belongsToMany(Permission::class);
    }

RoleController

class RoleController extends Controller
{
    public function index()
        {
            $roles = Role::all();

            return view('roles.index', compact('roles'));

        }

    public function store(Request $request)
        {

            $role = Role::create([

            'name' => $request->name,
            'display_name' => ucwords($request->display_name),
            'description' => $request->description,

            ]);

            //return response()->json("New Student Added", 200);
            Session::flash('success_message', "New Role Added");
            return Redirect::back();
        }

    // Deleting a Role
    // Handles Route::get('delete/{role}', 'RoleController@delete')->name('role.delete');
    public function delete(Role $role){
        $role->delete();
        return response()->json("Role Deleted");
    }

    public function restore($id)
    {
        $role = Role::withTrashed()->where('id', $id)->first();
        $role->restore();

        Session::flash('success_message', "Role Restored");
        return Redirect()->back();
    }

User Model

class User extends Authenticatable
{
    use Notifiable;
    use SoftDeletes;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'firstname', 'lastname', 'username', 'email', 'password', 'role_id',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function student()
    {
        return $this->hasMany(Student::class)->latest();
    }

    public function permissions()
    {
        return $this->belongsToMany(Permission::class);
    }

    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }

UserController

class UserController extends Controller
{
    public function index()
    {
        $users = User::withTrashed()->get();

        return view('users.index', compact('users'));
    }

    public function store(Request $request)
    {
        $user = User::create
        ([
            'firstname' => ucwords($request->firstname),
            'lastname' => ucwords($request->lastname),
            'username' => $request->username,
            'email' => $request->username,
            'password' => bcrypt($request->password),
        ]);

        //return response()->json("New User Added", 200);
        Session::flash('success_message', "New User Added");
        return Redirect::back();
    }

    public function delete(User $user)
    {
        $user->delete();
        return response()->json("User Deleted");
    }

    public function restore($id)
    {
        $user = User::withTrashed()->where('id', $id)->first();
        $user->restore();

        Session::flash('success_message', "User Restored");
        return Redirect()->back();

    }

}

and I don't know why on how to add the role in my user upon registering.

romulo27's avatar

create an new table, role_users , she has user_idand role_id.

m4martie's avatar

Yeah I already created role_user_table but the thing is I don't know on how to store the role_id from it.

Vilfago's avatar

Both answer are in the case of a user can have many roles (which is the case most of the time)

m4martie's avatar

I have data in my role table, it is just I don't know how to store it

Vilfago's avatar
    public function store(Request $request)
    {
        $user = User::create
        ([
            'firstname' => ucwords($request->firstname),
            'lastname' => ucwords($request->lastname),
            'username' => $request->username,
            'email' => $request->username,
            'password' => bcrypt($request->password),
        ]);

    $user->roles()->attach($request->roleId); //Add this line

        //return response()->json("New User Added", 200);
        Session::flash('success_message', "New User Added");
        return Redirect::back();
    }

I hope you validate the form before inserting it in your DB.

m4martie's avatar

I see. Do I need to create any pivot table?

m4martie's avatar
<div class="field">
            <div class="ui left icon input">
                <select name="roles[]" class="ui fluid dropdown">
                <option value="">Role</option>
                    @foreach($roles as $roles)
                    <option value="{{ $roles->id }}">{{ $roles->display_name }}</option>
                    @endforeach
                </select>
            </div>
         </div>

this is my form upon registering

Vilfago's avatar
Vilfago
Best Answer
Level 20

It's basic stuff, you should maybe take a look at the doc... but you need

users Table with :

  • id
  • firstname
  • lastname
  • username
  • email
  • password

roles Table with :

  • id
  • name

role_user Table with :

  • user_id
  • role_id

Your models seems right.

And to store the new user :

    public function store(Request $request)
    {
        $user = User::create
        ([
            'firstname' => ucwords($request->firstname),
            'lastname' => ucwords($request->lastname),
            'username' => $request->username,
            'email' => $request->username,
            'password' => bcrypt($request->password),
        ]);
    if($request->roleId){
            $user->roles()->attach($request->roleId);
    }

        //return response()->json("New User Added", 200);
        Session::flash('success_message', "New User Added");
        return Redirect::back();
    }

and your form

<div class="field">
            <div class="ui left icon input">
                <select name="roleId" class="ui fluid dropdown">
                <option value="">Role</option>
                    @foreach($roles as $roles)
                    <option value="{{ $roles->id }}">{{ $roles->display_name }}</option>
                    @endforeach
                </select>
            </div>
         </div>
m4martie's avatar

then it directly stored to role_user table?

Vilfago's avatar

Yes, it attach the role to the user, and laravel use the role_user table to attach as you have a many to many relation.

m4martie's avatar

well thank you very much it's working fine now.

Please or to participate in this conversation.