我想返回json,其中所有的时间戳数据类型都自动转换为ISO 8601。这在Laravel 7之后应该很容易实现,但我仍然面临这个问题。
我创建了两个数据类型为timestamp
的列start_time
和end_time
。在以JSON返回结果时,Laravel只将created_at
和updated_at
转换为ISO 8601(例如2022-04- 26 T09:44:47.00000Z)。我创建的两个列按照它们在数据库中的存储方式返回(例如2022-01-17 19:45:07)。
我在serializeDate()
中添加的替换默认方法的任何内容只会影响created_at
和updated_at
。
我能得到的最接近的方法是将下面的内容添加到我的模型中,但它在格式上仍有细微差异(例如,2022-04- 26 T10:30:00 Z与2022-04- 26 T09:44:47.00000Z)。
protected $casts = [
'start_time' => 'date:Y-m-d\TH:i:s\Z',
'end_time' => 'date:Y-m-d\TH:i:s\Z',
];
4条答案
按热度按时间q43xntqr1#
这可能不能直接回答问题,但我找到了一个变通办法。你可以做的是
Carbon::parse
那些列在返回到Json之前存储在数据库中。以下是返回数据库中所有插槽的示例:
j8ag8udp2#
这仅仅是因为您需要告诉Laravel它应该将哪些列视为模型中的日期,默认情况下会考虑created_at和updated_at。
有一个名为**$dates**的受保护属性,它接受一个包含所有被视为日期的列的数组。serializeDate方法会在该属性之后查找。
x0fgdtte3#
您可以将列转换为
date
,serializeDate()
函数将自动转换日期列6kkfgxo04#
若要修正这个问题,您可以覆写模型中的预设serializeDate()方法,并加入要以created_at和updated_at相同格式序列化的数据行。
例如:
您还可以使用Carbon库来处理日期格式:
然后,在控制器中,您可以使用$with方法,以自订serializeDate()方法传回结果:
这将以所需的ISO 8601格式返回start_time和end_time列的结果。