Нарушение ограничения целостности: 1048 Столбец «user_id» не может иметь нулевую ошибку при назначении ролей (Laravel 5.3)

Вот что я делал до возникновения ошибки

Я пытаюсь назначить роль для пользователя из таблицы моих users и roles в новой таблице, называемой `role_users '.

Модель Role.php

 class Role extends Model{ public function users(){ return $this->belongsToMany('App\User','role_users', 'role_id', 'user_id'); } } 

Модель User.php

 class User extends Model implements Authenticatable { use \Illuminate\Auth\Authenticatable; public function roles(){ return $this->belongsToMany('App\Role', 'role_users', 'user_id', 'role_id'); } } 

Я продолжаю получать ошибку в этой строке из моего AccountController.php

 $roleuser = new User; $user_superadmin = Role::where('role_desc', 'Superadmin')->first(); $roleuser->roles()->attach($user_superadmin); /*this line specifically*/ 

У меня есть Integrity constraint violation: 1048 Column 'user_id' cannot be null (SQL: insert into 'role_users' ('role_id', 'user_id') values (1, )) . Таблица users table уже обновлена, и user_id уже сохранен в базе данных.

Кто-нибудь может мне помочь? Я, должно быть, забыл о некоторых важных вещах.

Проблема здесь в том, что вы не прикрепляете роль к существующему пользователю, вы просто запускаете:

 $roleuser = new User; 

для создания объекта пользователя, который не сохраняется в базе данных.

Вы должны сделать что-то вроде этого:

 $roleuser = User::find(1); // find user with id 1 $user_superadmin = Role::where('role_desc', 'Superadmin')->first(); $roleuser->roles()->attach($user_superadmin); /*this line specifically*/ 

или

 $roleuser = User::create(['name' => 'Sample user']); // create sample user $user_superadmin = Role::where('role_desc', 'Superadmin')->first(); $roleuser->roles()->attach($user_superadmin); /*this line specifically*/ 

Вы также не должны использовать переменную $roleuser , потому что это явно $user

Вы не можете привязать отношение к существующему пользователю. Сначала попробуйте создать пользователя:

 $roleuser = User::create(['name' => 'John']); // Instead of new User; 

Или выберите пользователя из БД:

 $roleuser = User:find(1);