【问题标题】:Laravel Paginated Result TransformationLaravel 分页结果转换
【发布时间】:2020-05-23 13:34:33
【问题描述】:

这是我在一个雄辩的模型上分页后的响应Json。

{
    "current_page": 1,
    "data": [
        {
            "title": "First Title",
            "url": "first-title",

        },
        {
            "title": "Second Title",
            "url": "second-title",
        }
    ],
    "first_page_url": "http://xyz.local/api/v1/notifications?page=1",
    "from": 1,
    "last_page": 1,
    "last_page_url": "http://xyz.local/api/v1/notifications?page=1",
    "next_page_url": null,
    "path": "http://xyz.local/api/v1/notifications",
    "per_page": 10,
    "prev_page_url": null,
    "to": 2,
    "total": 2
}

在返回响应之前,我想从每个项目中转换“url”键,所以我使用了转换方法。

$data = $data->getCollection()->transform(function ($item) {

        $item->url = 'http://xyz.local/'.$item->url;

        return $item;
    });

如果我使用此转换并返回数据,虽然每个项目都在转换,但响应中不会返回其他键,例如“current_page”、“next_page_url”。如果我不使用转换,这些额外的键将正常返回。

转型后我得到的回应:

{
    [
        {
            "title": "First Title",
            "url": "http://xyz.local/first-title",

        },
        {
            "title": "Second Title",
            "url": "http://xyz.local/second-title",
        }
    ]
}

我期望的回应:

{
    "current_page": 1,
    "data": [
        {
            "title": "First Title",
            "url": "http://xyz.local/first-title",

        },
        {
            "title": "Second Title",
            "url": "http://xyz.local/second-title",
        }
    ],
    "first_page_url": "http://xyz.local/api/v1/notifications?page=1",
    "from": 1,
    "last_page": 1,
    "last_page_url": "http://xyz.local/api/v1/notifications?page=1",
    "next_page_url": null,
    "path": "http://xyz.local/api/v1/notifications",
    "per_page": 10,
    "prev_page_url": null,
    "to": 2,
    "total": 2
}

我在这里缺少什么?

【问题讨论】:

    标签: laravel eloquent pagination


    【解决方案1】:

    与大多数其他集合方法不同,transform 会修改集合本身。如果您希望创建一个新集合,请使用 ma​​p 方法。 docs

    要么删除$data =,要么使用$data->getCollection() = $data->getCollection()->map()

    【讨论】:

    • 不想创建新集合。但是感谢您的建议,我能够找到错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2017-02-24
    • 2015-07-17
    • 2017-01-12
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多