【问题标题】:Laravel paginate not working with select certain columns on querybuilderLaravel 分页不适用于在查询构建器上选择某些列
【发布时间】:2018-05-11 15:10:45
【问题描述】:

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

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 数组中的属性?

注意:我知道还有其他解决方案可以实现我想要的。我只想回答我的问题以弄清楚发生了什么?

【问题讨论】:

标签: php laravel pagination laravel-5.5


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    既然用户拥有role_id,那么为什么不获取用户为:

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

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

    【讨论】:

    • 我知道,但我的问题不是那个。我的问题是为什么 querybuilder 上的 paginate() 不尊重 select()?
    • 我现在明白了,我需要检查代码以了解发生了什么,不过你明白了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 2015-02-09
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    相关资源
    最近更新 更多