完整性约束违规:分配角色时发生 1048 列“user_id”不能为空错误(Laravel 5.3)

Egg*_*654 5 php mysql migration roles laravel

这是我在错误发生之前所做的

我想从我的分配给用户的角色usersroles表在一个名为'role_users'新表。

角色.php模型

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

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');
  }    
}
Run Code Online (Sandbox Code Playgroud)

我不断从我的AccountController.php收到这一行中的错误

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

我有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已经被保存到数据库。

有人能帮我吗?我一定忽略了一些重要的东西。

Mar*_*łek 6

这里的问题是您没有将角色附加到任何现有用户,您只需运行:

$roleuser = new User;
Run Code Online (Sandbox Code Playgroud)

创建不保存到数据库的用户对象。

你应该做这样的事情:

$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*/
Run Code Online (Sandbox Code Playgroud)

或者

$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*/
Run Code Online (Sandbox Code Playgroud)

你也不应该$roleuser在这里使用变量,因为它显然是$user