Laravel eloquent 在多个 select 中检索用户角色
Laravel eloquent retrieve user role in multi select
您好,我正在使用 Laravel,并且我正在使用几个用于用户身份验证和角色的包,它们是 Zizaco Confide and Zizaco Entrust。我已经 运行 完成了设置过程,并且我拥有角色和权限。这创建了以下 tables:
用户、角色、assigned_roles、权限、permission_role
tables 的结构如下,有两个用户:
users table
id | username | email
1 | adminuser | admin@test.com
2 | subscriber | subscriber@test.com
roles
id | name
1 | admin
2 | subscriber
assigned_roles
id | user_id | role_id
1 | 1 | 1
2 | 1 | 2
3 | 2 | 2
permissions
id | name | display_name
1 | can_view_admin | Can View Admin Display
2 | can_view_articles | Can View Articles
permission_role
id | permission_id | role_id
1 | 1 | 1
2 | 1 | 2
3 | 2 | 2
我有一个更新用户的编辑和更新功能table。但是,我还想更新此视图中的用户权限以及用户控制器中的用户权限。但是我不确定如何获取用户角色,因为他们可以有很多角色并将其注入到多 select.
这是我目前拥有的:
用户控制器:
public function edit($id)
{
$user = Auth::user();
if ($user->hasRole('Admin'))
{
$user = User::find($id);
return View::make('users.edit')->with('user', $user);
}
else {
return \Redirect::route('article');
}
}
public function update($id)
{
$rules = array(
'username' => 'required',
'email' => 'required'
);
$validator = Validator::make(Input::all(), $rules);
// process the login
if ($validator->fails()) {
return Redirect::back('/admin/user/' . $id . '/edit')->withErrors($validator)->withInput();
} else {
// store
$user = User::find($id);
$user->firstname = Input::get('firstname');
$user->lastname = Input::get('lastname');
$user->username = Input::get('username');
$user->email = Input::get('email');
$user->save();
// redirect
Session::flash('message', 'Successfully updated!');
return Redirect::to('/admin');
}
}
我的编辑表单如下:
{{ HTML::ul($errors->all()) }}
{{ Form::open(array('url' => URL::to('admin/user/'.$user->id.'/update'), 'method' => 'PATCH ')) }}
{{ Form::model($user) }}
{{ Form::text('firstname', null, array('class' => 'form-control')) }}
{{ Form::text('lastname', null, array('class' => 'form-control')) }}
{{ Form::text('username', null, array('class' => 'form-control')) }}
{{ Form::text('email', null, array('class' => 'form-control')) }}
{{ Form::submit('Update User', array('class' => 'btn btn-green')) }}
{{ Form::close() }}
我知道我可以这样获取所有角色:
$roles = DB::table('roles')->orderBy('name', 'asc')->lists('name', 'id');
然后像这样插入到多 select 中:
{{ Form::select('role', $roles , Input::old('role'), array('class' => 'select')) }}
我知道您可以这样获得用户角色:
$roles = User::find(1)->roles();
所以我尝试在我的编辑功能中更改这一行
$user = User::find($id);
至:
$user = User::find($id)->roles()->orderBy('name', 'asc')->lists('name', 'id');
但这会引发此错误:
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in field
list is ambiguous (SQL: select `name`, `id` from `roles` inner join
`assigned_roles` on `roles`.`id` = `assigned_roles`.`role_id` where
`assigned_roles`.`user_id` = 1 order by `name` asc)
有谁知道我如何使用委托中的函数获取用户角色(因为他们可以有多个角色)?或者可能使用 eloquent 因为数据存储在几个 tables 中,例如在编辑屏幕中我想通过 [=24= 获取 user
roles
] 此数据存储在assigned_roles
table 中。然后我需要获取存储在角色 table 中的角色名称,而 assigned_roles
table 包含 role_id
。然后我需要将它放入一个多 select 中,关于如何做到这一点有什么想法吗?我对 eloquent 不是很好,所以任何想法都将不胜感激。
对于 select,您实际上需要将所有角色作为一个数组:
$roles = Role::orderBy('name', 'asc')->lists('name', 'id');
$user = User::find($id);
return View::make('users.edit')->with('user', $user)->with('roles', $roles);
那么在你看来:
{{ Form::select('roles', $roles, $user->roles->lists('id'), array('class' => 'select', 'multiple' => true)) }}
之后,可以在update()
函数中使用sync()
来保存角色:
// ...
$user->save();
$user->roles()->sync(Input::get('roles', []));
// ...
您好,我正在使用 Laravel,并且我正在使用几个用于用户身份验证和角色的包,它们是 Zizaco Confide and Zizaco Entrust。我已经 运行 完成了设置过程,并且我拥有角色和权限。这创建了以下 tables:
用户、角色、assigned_roles、权限、permission_role
tables 的结构如下,有两个用户:
users table
id | username | email
1 | adminuser | admin@test.com
2 | subscriber | subscriber@test.com
roles
id | name
1 | admin
2 | subscriber
assigned_roles
id | user_id | role_id
1 | 1 | 1
2 | 1 | 2
3 | 2 | 2
permissions
id | name | display_name
1 | can_view_admin | Can View Admin Display
2 | can_view_articles | Can View Articles
permission_role
id | permission_id | role_id
1 | 1 | 1
2 | 1 | 2
3 | 2 | 2
我有一个更新用户的编辑和更新功能table。但是,我还想更新此视图中的用户权限以及用户控制器中的用户权限。但是我不确定如何获取用户角色,因为他们可以有很多角色并将其注入到多 select.
这是我目前拥有的:
用户控制器:
public function edit($id)
{
$user = Auth::user();
if ($user->hasRole('Admin'))
{
$user = User::find($id);
return View::make('users.edit')->with('user', $user);
}
else {
return \Redirect::route('article');
}
}
public function update($id)
{
$rules = array(
'username' => 'required',
'email' => 'required'
);
$validator = Validator::make(Input::all(), $rules);
// process the login
if ($validator->fails()) {
return Redirect::back('/admin/user/' . $id . '/edit')->withErrors($validator)->withInput();
} else {
// store
$user = User::find($id);
$user->firstname = Input::get('firstname');
$user->lastname = Input::get('lastname');
$user->username = Input::get('username');
$user->email = Input::get('email');
$user->save();
// redirect
Session::flash('message', 'Successfully updated!');
return Redirect::to('/admin');
}
}
我的编辑表单如下:
{{ HTML::ul($errors->all()) }}
{{ Form::open(array('url' => URL::to('admin/user/'.$user->id.'/update'), 'method' => 'PATCH ')) }}
{{ Form::model($user) }}
{{ Form::text('firstname', null, array('class' => 'form-control')) }}
{{ Form::text('lastname', null, array('class' => 'form-control')) }}
{{ Form::text('username', null, array('class' => 'form-control')) }}
{{ Form::text('email', null, array('class' => 'form-control')) }}
{{ Form::submit('Update User', array('class' => 'btn btn-green')) }}
{{ Form::close() }}
我知道我可以这样获取所有角色:
$roles = DB::table('roles')->orderBy('name', 'asc')->lists('name', 'id');
然后像这样插入到多 select 中:
{{ Form::select('role', $roles , Input::old('role'), array('class' => 'select')) }}
我知道您可以这样获得用户角色:
$roles = User::find(1)->roles();
所以我尝试在我的编辑功能中更改这一行
$user = User::find($id);
至:
$user = User::find($id)->roles()->orderBy('name', 'asc')->lists('name', 'id');
但这会引发此错误:
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in field
list is ambiguous (SQL: select `name`, `id` from `roles` inner join
`assigned_roles` on `roles`.`id` = `assigned_roles`.`role_id` where
`assigned_roles`.`user_id` = 1 order by `name` asc)
有谁知道我如何使用委托中的函数获取用户角色(因为他们可以有多个角色)?或者可能使用 eloquent 因为数据存储在几个 tables 中,例如在编辑屏幕中我想通过 [=24= 获取 user
roles
] 此数据存储在assigned_roles
table 中。然后我需要获取存储在角色 table 中的角色名称,而 assigned_roles
table 包含 role_id
。然后我需要将它放入一个多 select 中,关于如何做到这一点有什么想法吗?我对 eloquent 不是很好,所以任何想法都将不胜感激。
对于 select,您实际上需要将所有角色作为一个数组:
$roles = Role::orderBy('name', 'asc')->lists('name', 'id');
$user = User::find($id);
return View::make('users.edit')->with('user', $user)->with('roles', $roles);
那么在你看来:
{{ Form::select('roles', $roles, $user->roles->lists('id'), array('class' => 'select', 'multiple' => true)) }}
之后,可以在update()
函数中使用sync()
来保存角色:
// ...
$user->save();
$user->roles()->sync(Input::get('roles', []));
// ...