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

Laravel Resource返回日期对象而非日期值问题求助

解决Laravel 5.6 Resource返回日期对象而非字符串的问题

嘿,我刚好碰到过一模一样的问题,给你几个实用的解决思路:

首先得明确原因:Laravel 5.6开始,Eloquent模型的日期字段默认会被转为Carbon实例,当你在Resource的toArray方法里直接返回这个Carbon对象时,框架会自动把它序列化成那个包含date、timezone的嵌套对象结构。你配置的$casts其实是用来把数据库存储的字符串转成Carbon对象的,它管的是数据输入转换而非输出格式化,所以才会看起来完全没效果。

下面是两种快速解决的方式:

方式一:在Resource里手动格式化日期

直接在toArray方法里调用Carbon的格式化方法,把对象转成你想要的字符串格式:

class OfferResource extends Resource { 
    /** 
     * Transform the resource into an array. 
     * 
     * @param \Illuminate\Http\Request $request 
     * @return array 
     */ 
    public function toArray($request) { 
        return [ 
            'created_at' => $this->created_at->format('Y-m-d'),
            // 如果需要带时分秒的格式,可以用 toDateTimeString():
            // 'created_at' => $this->created_at->toDateTimeString()
        ]; 
    } 
}

方式二:全局配置Carbon的序列化规则

如果你的项目里很多地方都需要统一的日期输出格式,可以在App\Providers\AppServiceProvider的boot方法里添加全局的Carbon序列化规则,这样所有Carbon对象在被序列化时都会自动转成指定格式的字符串:

use Carbon\Carbon;

public function boot()
{
    Carbon::serializeUsing(function ($carbon) {
        return $carbon->format('Y-m-d');
    });
}

这样不管是在Resource里直接返回$this->created_at,还是其他地方返回Carbon对象,都会输出你想要的字符串格式,不用每个地方都手动处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:06:02