Laravel paginate无法在querybuilder

时间:2017-11-28 08:17:37

标签: php laravel pagination laravel-5.5

我在角色模型中定义了如下用户角色关系(多对多):

public function users()
{
    return $this->belongsToMany('App\User');
}

现在我想向所有用户展示某个角色。我执行以下操作:

$list = Role::find(1)->users()->select('name')->orderBy('name')->paginate(10);

此处$list包含属于id为1且角色正确的角色的所有用户。但问题是:在$list上添加断点时,它表明:所有用户模型的属性都被检索,就像select('name')一样无效。 这是一个很大的问题,特别是当我想将$list作为json返回时。即使用户密码位于用户模型的$hidden数组中,也会检索用户密码。 我的问题是:

为什么querybuilder上的paginate()不尊重select(),也不尊重模型的$hidden数组中的属性?

注意:我知道还有其他解决方案可以达到我的目的。我只是想回答一下我的问题,以弄清楚发生了什么?

2 个答案:

答案 0 :(得分:5)

select('name')无效,因为 paginate()方法将列作为第二个参数

$list = Role::find(1)->users()->orderBy('name')->paginate(10, ['name']);

您可以在此处阅读有关参数和方法的更多信息 https://laravel.com/api/5.5/Illuminate/Database/Eloquent/Builder.html#method_paginate

答案 1 :(得分:1)

由于用户拥有role_id,为什么不将用户提取为:

User::where('role_id', 1)->orderBy('name')->paginate(10);

您基本上是获得一个角色,然后针对该角色获取一个列表。