无法将值NULL插入列' user_id',table' dbo.role_user&#39 ;;列不允许空值

时间:2015-06-16 15:17:03

标签: php laravel-5 rbac

我在Laravel 5.0中使用Zizaco / Entrust来应用RBAC,并且我遇到以下错误:

Cannot insert the value NULL into column 'user_id', table 'dbo.role_user'; column does not allow nulls. INSERT fails. (SQL: insert into [role_user] ([role_id], [user_id]) values (2, ))

我按照所有步骤实施了Entrust,并且在我的User.php存储方法中我有:

public function store(UserRequest $request)
{
    $user = new User();
    $user->create($request->all());
    $roles=$request->get('role_id');
    $user->roles->attach($roles);
    return redirect('users');
}

我想知道如何解决这个问题。所有的帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

额外信息: Entrust需要userid能够为用户分配角色。 创建用户时,没有用户标识,因此在创建用户时将创建用户标识。 因此,在创建用户之后,您需要首先检索用户,然后才能将其分配给角色。

此处:查看此网址中的第二个代码块:Entrust Github。 他们首先接收用户,然后将其分配给角色。

首先像这样创建用户:

User::create($request->all());

然后像这样抓住新创建的用户:

$User = User::where('username', '=', $request->username)->first();

然后将用户分配到以下角色:

$User->roles()->attach($request->roleid);//parenthesis missing

所有在一起:

public function store(UserRequest $request)
{
    User::create($request->all());

    $User = User::where('username', '=', $request->username)->first();

    $User->roles()->attach($request->roleid);

    return redirect('users');
}