Laravel 分页不适用于 select querybuilder 上的某些列
Laravel paginate not working with select certain columns on querybuilder
我在角色模型中定义了如下用户角色关系(多对多):
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')
没有效果一样。
这是一个大问题,尤其是当我想 return 将 $list
设为 json 时。检索用户密码,即使它位于用户模型的 $hidden
数组中。
我的问题是:
为什么 querybuilder 上的 paginate()
既不尊重 select()
也不尊重模型 $hidden
数组中的属性?
注意:我知道还有其他解决方案可以实现我想要的。我只想得到我的问题的答案,以弄清楚发生了什么事?
既然用户有 role_id
那你为什么不获取用户为:
User::where('role_id', 1)->orderBy('name')->paginate(10);
您基本上是在获取一个角色,然后针对该角色获取一个列表。
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
我在角色模型中定义了如下用户角色关系(多对多):
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')
没有效果一样。
这是一个大问题,尤其是当我想 return 将 $list
设为 json 时。检索用户密码,即使它位于用户模型的 $hidden
数组中。
我的问题是:
为什么 querybuilder 上的 paginate()
既不尊重 select()
也不尊重模型 $hidden
数组中的属性?
注意:我知道还有其他解决方案可以实现我想要的。我只想得到我的问题的答案,以弄清楚发生了什么事?
既然用户有 role_id
那你为什么不获取用户为:
User::where('role_id', 1)->orderBy('name')->paginate(10);
您基本上是在获取一个角色,然后针对该角色获取一个列表。
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