You need to enable JavaScript to run this app. Laravel中如何在JSON响应数组内拼接start_date与start_time为start字段
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何在JSON响应数组内拼接start_date与start_time为start字段

Laravel接口拼接自定义start字段实现方案

要满足将start_date与start_time拼接为指定格式start字段、全量保留原有响应字段的需求,有两种适配不同场景的实现方式:

轻量场景:控制器内直接处理

适合只在当前单个接口需要拼接字段的场景,不需要额外新建文件,直接修改现有控制器逻辑即可,修改后的完整代码如下:

public function calendar(Job $job)
{
    $user = auth()->user();
    $calendar = $job->where('user_id', $user->id)->get()->map(function($item) {
        // 给模型动态追加start属性,不修改数据库存储值
        $item->setAttribute('start', trim($item->start_date . ' ' . $item->start_time));
        return $item;
    });

    return response()->json($calendar);
}
  • 该写法直接沿用Laravel集合的遍历能力,所有原有模型字段会随模型实例正常序列化输出,不会出现字段丢失
  • 拼接时加trim()处理,可规避原字段前后多余空格导致的格式偏差,最终输出的start字段完全匹配2021-02-18 12:32:00的格式要求

规范场景:API资源类实现

如果项目有多个接口需要返回该start字段,用Laravel内置的API资源类做统一封装,后续维护更高效:

  1. 执行命令生成资源类:php artisan make:resource JobCalendarResource
  2. 修改生成的资源类文件中的toArray方法,通过合并原有字段+自定义字段的方式实现,不会遗漏原有字段:
    public function toArray($request)
    {
        return array_merge(parent::toArray($request), [
            'start' => trim($this->start_date . ' ' . $this->start_time)
        ]);
    }
    
  3. 修改控制器返回逻辑,用资源类包装查询结果:
    public function calendar(Job $job)
    {
        $user = auth()->user();
        $calendar = $job->where('user_id', $user->id)->get();
    
        return JobCalendarResource::collection($calendar);
    }
    

避坑提示
不要手动把所有需要返回的原有字段逐个列在返回数组里,这种写法后续新增数据库字段时极易出现漏配,用动态追加属性或合并父类返回值的方式,能自动同步所有模型字段,减少维护成本。如果存在start_date或start_time为空的异常数据,可在拼接时加判空逻辑,避免出现异常的start值。

内容的提问来源于stack exchange,提问作者Jareer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 20:54:03