完整性约束冲突:1048 1048指定角色时发生列'user_id'不能为空错误(Laravel 5.3)

jm81lzqq  于 2023-03-09  发布在  其他
关注(0)|答案(3)|浏览(162)

以下是发生错误之前我正在执行的操作
我正尝试在名为'role_users'的新表中为usersroles表中的用户分配角色。

角色.php模型

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

用户名.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已经保存到数据库。
有人能帮帮我吗?我一定是忽略了一些重要的东西。

pprl5pva

pprl5pva1#

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

$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

zdwk9cvp

zdwk9cvp2#

您不能将关系附加到不存在的用户。请先尝试创建用户:

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

或从DB中获取用户:

$roleuser = User:find(1);
aamkag61

aamkag613#

我在使用Laravel 9时遇到了同样的问题。您应该在添加权限之前创建用户。

$user = new User();

然后在最后执行操作保存用户

$user->save();

相关问题