我正在使用laravel-permission来管理角色和显示内容。根据文档,您可以使用$roles = $user->roles()->pluck('name')
检索用户角色。我的问题是返回的数据是["admin"]
,而不仅仅是admin
。我正在审查集合方法,看起来get('name')
会返回我想要的内容。当我尝试使用以下命令Auth::user()->roles()->get('name')
时,我得到了
1/1
ErrorException in BelongsToMany.php line 360:
Argument 1 passed to Illuminate\Database\Eloquent\Relations\BelongsToMany::getSelectColumns() must be of the type array, string given
在我看来,get()
方法期待一个数组,但是我试图引用数组中的一个项目。 Auth::user()->roles()->get()
的原始输出为[{"id":1,"name":"admin","created_at":"2016-03-10 06:24:47","updated_at":"2016-03-10 06:24:47","pivot":{"user_id":1,"role_id":1}}]
我找到了一种解决方法来提取正确的内容,但它正在使用正则表达式删除pluck()
方法中包含的不需要的字符。
preg_replace('/\W/i','', Auth::user()->roles()->pluck('name'))
我似乎错过了某些内容,或者错误地使用get()
方法。任何建议都表示赞赏。
答案 0 :(得分:1)
那是因为用户可以拥有多个角色,因此角色是一个集合。 如果您 100%确定用户只有一个角色,您可以轻松完成
web.config
这将获得该集合的第一项(角色),然后是它的名称。
答案 1 :(得分:1)
我认为pluck()
将为集合中的每个模型返回给定列的值,这将解释该数组。在您的情况下,用户看起来只有一个角色,因此您只能获得一个包含一个项目的数组。如果用户有多个角色,您可能会得到一个包含多个项目的数组。
另一方面,get()
方法用于在构建查询后对数据库执行查询。查询的结果是返回的结果。要返回仅包含单个值的模型集合,您需要传递一个只包含所需列的数组,但这只会选择模型,而这似乎不是您最终需要的模型。
您可以尝试这样做:$roles = $user->roles()->first()->name
对first()的调用将获取roles()
返回的集合中的第一个模型,然后您可以从该模型中获取角色的名称。
我通常会对此进行一些错误检查:
$role = $user->roles()->first();
if (is_null($role)) {
//Handle what happens if no role comes back
}
$role_name = $role->name;