如何解决Laravel 8 - 日期转换
我对在 Laravel 8 中使用 Date Casting (https://laravel.com/docs/8.x/eloquent-mutators#date-casting) 感到困惑。
我需要从数据库中获取所有格式为 Y-m-d\TH:i:s.vP
的日期字段;例如:1990-02-12T01:08:12.820+00:00
。
为此,在我的 Origin
模型中,我设置:
class Origin extends Model
{
protected $casts = [
'myDate' => 'datetime:Y-m-d\TH:i:s.vP'
];
}
现在,字段 myDate
被转换为 Carbon
:
$ PHP artisan tinker
>>>
>>> $origin = App\Origin::first();
>>>
>>> dd($origin->myDate);
Illuminate\Support\Carbon @634784892^ {#4629
#constructedobjectId: "000000005620d556000000007f71416e"
#localMonthsOverflow: null
#localYearsOverflow: null
#localStrictModeEnabled: null
#localHumanDiffOptions: null
#localToStringFormat: null
#localSerializer: null
#localMacros: null
#localGenericMacros: null
#localFormatFunction: null
#localTranslator: null
#dumpProperties: array:3 [
0 => "date"
1 => "timezone_type"
2 => "timezone"
]
#dumpLocale: null
date: 1990-02-12 01:08:12.820 UTC (+00:00)
}
>>>
>>>
但是当我获得属性时,输出不遵守格式 Y-m-d\TH:i:s.vP
:
>>>
>>> echo $origin->myDate;
1990-02-12 01:08:12⏎
>>>
>>>
要获得所需的格式,我需要再次格式化它:
>>>
>>> echo $origin->myDate->format('Y-m-d\TH:i:s.vP');
1990-02-12T01:08:12.820+00:00⏎
>>>
>>>
或在使用前转换模型 toArray()
:
>>>
>>> echo $origin->toArray()['myDate'];
1990-02-12T01:08:12.820+00:00⏎
>>>
>>>
设置日期格式并获得正确输出的最佳实践是什么?我想使用:
>>>
>>> echo $origin->myDate;
1990-02-12T01:08:12.820+00:00⏎
>>>
>>>
谢谢
解决方法
正如您所说的 Laravel 铸造格式不起作用,您可以像这样创建访问器
class Origin extends Model
{
protected $casts = [
'myDate' => 'datetime:Y-m-d\TH:i:s.vP'
];
public function getMyDateAttribute($value)
{
return $value->format('Y-m-d\TH:i:s.vP');
}
}
它将确保您始终返回此格式
参考链接 https://laravel.com/docs/8.x/eloquent-mutators#defining-an-accessor
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。