【问题标题】:How to get specific columns in Laravel Eloquent with pagination?如何通过分页获取 Laravel Eloquent 中的特定列?
【发布时间】:2019-04-01 12:10:57
【问题描述】:

我使用这个表架构:

Schema::create('forms', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name', 255)->default('');
    $table->text('html')->nullable();
    $table->text('json')->nullable();

    $table->timestamps();
    $table->softDeletes();
});

这是模型:

class Form extends Model
{
    use SoftDeletes;

    protected $fillable = [
        'name',
        'html',
        'json'
    ];

    protected $hidden = ['created_at', 'updated_at', 'deleted_at'];
}

在控制器中,我想显示所有模型项目的列表,但只有 idname 文件。现在我使用它,但它显示所有未隐藏的字段:

public function index() {
    return Form::->paginate(100);
}

此功能仅适用于表格名称列表。但这里是第二个显示表单数据以进行修改:

public function show(string $id) {
    $item = Form::findOrFail($id);

    return response()->json($item);
}

当然,最后一个函数需要显示所有字段(id、name、html 和 json)。

是否有任何最佳做法可以在 index() 函数中使用 paginate() 仅显示我需要的字段?

【问题讨论】:

    标签: laravel eloquent laravel-5.7 laravel-pagination


    【解决方案1】:

    如果我没有错,那么希望您可以这样做以获取特定列以及分页:

    return Form::paginate(100,['id','name',.....]);
    

    【讨论】:

    • 这是最简单的解决方案。谢谢!
    【解决方案2】:

    如果我正确阅读了您的问题,您要做的是创建一个 Form 对象的集合,其中实际上在索引概览中检索到 idname 字段。

    您可以通过在控制器中创建一个新的集合实例来轻松做到这一点:

    public function index() {
       // use the Eloquent select() function
       $forms = Form::select('id', 'name')->paginate(100);
       return $forms;
    }
    

    我个人会将该集合放入存储库模式中,以使其更易于缓存。 Here's a nice canonical reference Laravel 中的存储库模式。

    在您的控制器上的显示功能中,您无需更改任何内容,因为 ID 仍然相同。

    为了将来的参考,请记住 paginate 方法仅对调用它的集合进行分页,而不是对与特定模型相关的所有内容或该集合以外的任何内容进行分页。因此,如果您以任何方式创建一个新集合,并在该新集合上调用 paginate 方法,则只会对其中的任何内容进行分页。这是相当强大的东西! Here's the documentation reference.

    【讨论】:

    • Form::all('id', 'name')->paginate(100) 因为这个原因不能工作:Collection::paginate does not exist,但 Form::select() 版本工作正常。谢谢!
    • 啊,这很奇怪,我认为所有 Eloquent 函数都应该能够分页。还是删了。
    猜你喜欢
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 2013-11-20
    • 2021-12-30
    • 1970-01-01
    • 2016-11-05
    • 2019-08-06
    相关资源
    最近更新 更多