我在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');
}
我想知道如何解决这个问题。所有的帮助表示赞赏。
答案 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');
}