php - 将自定义元数据合并到 laravel 中的分页响应
问题描述
我的控制器中有以下代码:
公共功能索引(SaleRequest $request,$id){
try {
$from = Carbon::parse($request->query->get('from', '1970-01-01'));
$till = Carbon::parse($request->query->get('till', Carbon::now()))->endOfDay();
} catch (\Exception $e) {
return response()->json([
'error' => 'Invalid time range or data',
], 400);
}
$includes = ['product', 'price'];
$seller = $this->resellerRepository->findOrFail($id);
$paginator = $this->parseRequest($request, $seller)->with($includes)->paginate();
$sales = $paginator->items();
$data = fractal()
->collection($sales, new SaleTransformer())
->parseIncludes($includes)
->paginateWith(new IlluminatePaginatorAdapter($paginator))
->toArray();
$sum = 0;
foreach ($sales as $sale) {
$sum = $sum + $sale->price->value_origin;
}
$data['meta'] = [
'from' => $from->toDateString(),
'till' => $till->toDateString(),
'count_total' => count($data['data']),
'total' => $sum / 100,
];
return response()->json($data);
}
在我的回复中,我没有从分页器获得分页元数据。我只得到自定义元数据:
"meta": {
"from": "1970-01-01",
"till": "2018-09-05",
"count_total": 5,
"total": 80
}
我的方法是将分页数据手动添加到元中,例如:
$data['meta'] = [
'from' => $from->toDateString(),
'till' => $till->toDateString(),
'count_total' => count($data['data']),
'total_sum' => $sum / 100,
'pagination' => [
'current_page' => $paginator->currentPage(),
'last_page' => $paginator->lastPage(),
'total' => $paginator->total(),
'count' => $paginator->count(),
'per_page' => $paginator->perPage(),
]
];
有没有更好的方法来做到这一点?
提前致谢!
解决方案
答案是更新我的 ide_helper 方法,因为 Fractal 有一个方法 addMeta() 。
$data = fractal()
->collection($items, new ItemTransformer())
->paginateWith(new IlluminatePaginatorAdapter($paginator))
->addMeta([
'from' => $from->toDateString(),
'till' => $till->toDateString(),
'total_sum' => $totalSum,
'page_sum' => $sum,
])
->toArray();
推荐阅读
- c# - 在 DocumentCompleted 中运行一次函数
- python - 为什么在检索频道消息的内容时 Telethon 会挂起?
- vue.js - 即使路由更改,根'/'路由在 vuetify 中仍保持活动状态
- r - R ggplot2 - 错误栏宽度问题
- hyperledger - 错误:> 交易因状态无效 (ENDORSEMENT_POLICY_FAILURE)
- rails-activestorage - PDF 文件的 image_tag 中的 ActionView::Template::Error (ActiveStorage::InvariableError)
- php - 如何使用 db 更新两个表:事务 laravel
- cassandra - Cassandra 用于 P2P 分布式网络
- python - 避免在 Python forloop 中覆盖数据集
- javascript - 我可以在打字稿中使用不同类型数组作为参数的函数重载吗