You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 06:32:40