【问题标题】:Returning paginated eloquent models with custom JSON schema?返回具有自定义 JSON 模式的分页雄辩模型?
【发布时间】:2014-08-01 23:25:54
【问题描述】:

我正在使用 Laravel 4 中的 API,现在当我以 JSON 格式返回分页信息时,它会以这种特定格式返回:

    {
        "Photos":{
            "total":1,
            "per_page":15,
            "current_page":1,
            "last_page":1,
            "from":1,
            "to":1,
            "data":[
                {
                    "id":3,
                    "moreInfo":"..."
                }
            ]
        }
    }

但我希望我的 API 改为以这种格式返回信息:

    {
        "total":1,
        "per_page":15,
        "current_page":1,
        "last_page":1,
        "from":1,
        "to":1,
        "Photos":[
            {
                "id":3,
                "moreInfo":"..."
            }
        ]
    }

相关代码如下:

    if (Input::has('page')) {
        $limit = (Input::get('limit')) ? Input::get('limit') : 15;

        return Response::json([
            'Photos' => $photos->paginate($limit)->toArray()
        ]);
    }

【问题讨论】:

  • 如果你不喜欢 Laravel 的 data 键,那么手动将其重命名为 Photos。然后就丢掉exra ['Photos'=> 包装。

标签: php json laravel pagination eloquent


【解决方案1】:

所以去掉photos 组件:

return Response::json($photos->paginate($limit)->toArray())

【讨论】:

  • 在我的第一个示例中返回响应,但项目仍在[data]
  • 那么您需要获取 paginate 正在构建的数组并自己修改它。如果您想要自定义格式,则必须编写代码来生成该表单。
  • 是的,我意识到哈哈。当我可以访问它返回的数组时,我试图弄清楚如何通过某种方法从 Pagination 类中获取数据过于复杂了:(。谢谢,你可以更新你的答案,我会接受它。
【解决方案2】:

起初我并没有意识到这实际上是多么简单,我尝试通过Pagination->getItems()Pagination->getCollection() 获取数据。

我意识到我所要做的就是从分页中获取 ['data'] 部分。我的代码现在看起来像:

    if (Input::has('page')) {
        $limit = (Input::get('limit')) ? Input::get('limit') : 15;

        $pagedPhotos = $photos->paginate($limit);

        return Response::json([
            'total' => $pagedPhotos->getTotal(),
            'per_page' => $pagedPhotos->getPerPage(),
            'current_page' => $pagedPhotos->getCurrentPage(),
            'last_page' => $pagedPhotos->getLastPage(),
            'from' => $pagedPhotos->getFrom(),
            'to' => $pagedPhotos->getTo(),
            'Photos' => $photos->paginate($limit)->toArray()['data']
        ]);
    }

【讨论】:

    猜你喜欢
    • 2018-01-14
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 2016-01-10
    相关资源
    最近更新 更多