Php 使用集合->;get()而不是collection->;拔

Php 使用集合->;get()而不是collection->;拔,php,laravel,methods,collections,laravel-5.2,Php,Laravel,Methods,Collections,Laravel 5.2,我使用它来管理角色和显示内容。根据这些文档,您可以使用$roles=$user->roles()->polck('name')检索用户角色。我的问题是返回的数据是[“admin”],而不仅仅是admin。我正在查看collections方法,它看起来像是get('name')将返回我要查找的内容。当我尝试使用以下命令时,Auth::user()->roles()->get('name')I get 1/1 ErrorException in BelongsToMany.php line 360:

我使用它来管理角色和显示内容。根据这些文档,您可以使用
$roles=$user->roles()->polck('name')
检索用户角色。我的问题是返回的数据是
[“admin”]
,而不仅仅是
admin
。我正在查看collections方法,它看起来像是
get('name')
将返回我要查找的内容。当我尝试使用以下命令时,
Auth::user()->roles()->get('name')
I get

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}]

我已经找到了一种提取正确内容的解决方法,但是它使用正则表达式来删除
pulk()
方法中包含的不需要的字符

preg_replace('/\W/i','', Auth::user()->roles()->pluck('name'))

似乎我在错误地使用
get()。感谢任何建议。

这是因为一个用户可以有许多角色,所以角色是一个集合。 如果你100%确信一个用户只有一个角色,你可以很容易地做到

Auth::user()->roles()->first()->name


这将获得该集合的第一项(角色),然后是其名称。

这是因为用户可以有多个角色,所以角色是一个集合。 如果你100%确信一个用户只有一个角色,你可以很容易地做到

Auth::user()->roles()->first()->name

这将获得该集合的第一项(角色),然后是它的名称。

我认为
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;
我认为
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;