Вот что я делал до возникновения ошибки
Я пытаюсь назначить роль для пользователя из таблицы моих 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);