如何在Laravel中通过Resource将查询结果拆分为两个数组输出
修改Laravel资源类返回结构,生成指定JSON格式
步骤1:调整NewsDetailsResource的返回结构
将原资源类的字段拆分为basicData和descriptionData两个数组,按目标结构包装:
<?php namespace App\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; class NewsDetailsResource extends JsonResource { public function toArray($request) { return [ 'basicData' => [ [ 'id' => $this->id, 'slug' => $this->slug, 'title' => $this->title, 'Auther' => $this->auther, // 匹配目标JSON的键名格式 'date' => date('d-m-Y', strtotime($this->created_at)) ] ], 'descriptionData' => [ [ 'description' => $this->description, 'logo' => config('app.url') . $this->logo ] ] ]; } }
步骤2:控制器代码调整(可选)
如果需要完全匹配示例中外层包含数组的结构,修改控制器代码如下:
$NewsData = News::query()->where('id', $id)->first(); $this->body['HeroSectionData'] = [NewsDetailsResource::make($NewsData)->resolve()];
若只需返回拆分后的嵌套结构,原控制器代码可保持不变:
$NewsData = News::query()->where('id', $id)->first(); $this->body['NewsData'] = NewsDetailsResource::make($NewsData);
最终返回的JSON结构
调整后接口将返回符合要求的结构:
{ "HeroSectionData": [ { "basicData": [ { "id": 1, "slug": "sdasdasd", "title": "ASdasda sad a SAd", "Auther": "sdasdasd", "date": "01-08-2023" } ], "descriptionData": [ { "description": "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.", "logo": "https://your-app-url.com/path/to/logo.png" } ] } ] }
内容的提问来源于stack exchange,提问作者AhmedSamy
相关产品推荐
相关产品推荐

