使用 collection->get() 而不是 collection->pluck()
Use collection->get() instead of collection->pluck()
我正在使用 laravel-permission 来管理角色和显示内容。根据文档,您可以使用 $roles = $user->roles()->pluck('name')
检索用户角色。我的问题是 returned 的数据是 ["admin"]
而不仅仅是 admin
。我正在审查收集方法,看起来 get('name')
会 return 我正在寻找的东西。当我尝试使用以下命令时 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()
方法。任何建议表示赞赏。
那是因为一个用户可以有多个角色,所以角色是一个集合。
如果您100% 确定 用户将只有一个角色,您可以轻松做到
Auth::user()->roles()->first()->name
这将获得该集合的第一项(角色),然后是它的名称。
我认为 pluck()
将为集合 中的每个模型 return 给定列 的值,这将解释数组。在您的情况下,用户似乎只有一个角色,因此您得到的数组只有一个项目。如果用户有多个角色,您可能会得到一个包含多个项目的数组。
另一方面,get()
方法用于在构建查询后对数据库执行查询。查询的结果是returned。要 return 只有一个值的模型集合,您需要传递一个只包含您想要的一列的数组,但这只会 select 个模型,这似乎不是您最终想要的需要。
您可以试试这个:$roles = $user->roles()->first()->name
对 first() 的调用将获取 return 由 roles()
编辑的集合中的第一个模型,然后您可以从该模型中获取角色的名称。
我通常会对此进行一些错误检查:
$role = $user->roles()->first();
if (is_null($role)) {
//Handle what happens if no role comes back
}
$role_name = $role->name;
我正在使用 laravel-permission 来管理角色和显示内容。根据文档,您可以使用 $roles = $user->roles()->pluck('name')
检索用户角色。我的问题是 returned 的数据是 ["admin"]
而不仅仅是 admin
。我正在审查收集方法,看起来 get('name')
会 return 我正在寻找的东西。当我尝试使用以下命令时 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()
方法。任何建议表示赞赏。
那是因为一个用户可以有多个角色,所以角色是一个集合。 如果您100% 确定 用户将只有一个角色,您可以轻松做到
Auth::user()->roles()->first()->name
这将获得该集合的第一项(角色),然后是它的名称。
我认为 pluck()
将为集合 中的每个模型 return 给定列 的值,这将解释数组。在您的情况下,用户似乎只有一个角色,因此您得到的数组只有一个项目。如果用户有多个角色,您可能会得到一个包含多个项目的数组。
另一方面,get()
方法用于在构建查询后对数据库执行查询。查询的结果是returned。要 return 只有一个值的模型集合,您需要传递一个只包含您想要的一列的数组,但这只会 select 个模型,这似乎不是您最终想要的需要。
您可以试试这个:$roles = $user->roles()->first()->name
对 first() 的调用将获取 return 由 roles()
编辑的集合中的第一个模型,然后您可以从该模型中获取角色的名称。
我通常会对此进行一些错误检查:
$role = $user->roles()->first();
if (is_null($role)) {
//Handle what happens if no role comes back
}
$role_name = $role->name;