如何格式化(转换)laravel数据库分页结果?

时间:2017-07-07 16:04:54

标签: php laravel eloquent

例如我有以下代码:

public function index()
{
    return
        Model::select(['id', 'some_field', ...// more some fields])
            ->with('data') // load relation
            ->paginate(20);
}

如何格式化(转换/操作)从数据库中获取的数据?

CakePHP ORM有用的方法 - https://book.cakephp.org/3.0/en/orm/query-builder.html#adding-calculated-fields &安培;&安培; https://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#map-reduce

但是我找不到任何东西,这可以帮助我在Laravel做同样的事情。 我可以在模型中覆盖“toArray”方法,但这会影响所有应用程序部分(不仅是我控制器中的索引操作)。

2 个答案:

答案 0 :(得分:3)

您可以在Laravel中执行相同的操作,例如:

return Model::select(['id', 'some_field', ...// more some fields])
->with('data')
->paginate(20)
->map(function($item, $key) {
    // Some pseudo code
    $item->uid = uniqid();

    // Must return the $item
    return $item;
});

还有其他方法可以做类似的事情。您可以在Laravel中执行更多操作。在许多方法中也有transform方法。

答案 1 :(得分:1)

paginate()get()将返回Collection,以便您访问所有Collection methods

你可以这样做:

public function index()
{
    return
        Model::select(['id', 'some_field', ...// more some fields])
            ->with('data') // load relation
            ->paginate(20)
            ->map(function($model) {
                $model->total_things = $model->one_thing + $model->other_thing;
                return $model;
            });
}