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

swarley_HIMYM's avatar

Laravel Spatie Roles

i've been added user to roles admin but doesnt work

the code like this.

Route::get('give-role-user', function (){
    $user = User::find(1); 
    $user->assignRole('admin');
});

but, i got some error like this,

Illuminate\Database\QueryException
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY' (SQL: insert into `role_user` (`roles_id`, `user_id`) values (2, 1)) 
0 likes
3 replies
Snapey's avatar

does user 1 already have role 2?

chaudigv's avatar

Couple of things to check:

  • Spatie\Permission\Traits\HasRoles trait to your User model(s)
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;

    // ...
}
  • Try another way of assigning the role to a user
$adminRole = Role::whereName('admin')->first();
$user = User::find(1); 
$user->assignRole($adminRole);
Sinnbeck's avatar
Route::get('give-role-user', function (){
    $user = User::find(1); 
    if(! $user->hasRole('admin')) {
        $user->assignRole('admin');
    }
});

Please or to participate in this conversation.