【问题标题】:Force Eloquent Models to output all timestamps as long强制 Eloquent 模型输出所有时间戳
【发布时间】:2016-12-28 01:12:29
【问题描述】:

我正在使用 Eloquent 模型开发后端。为了设置输出日期的默认方式,我正在寻找一种方法来告诉 Eloquent 模型将其日期属性输出为 long(unix-timestamp)。

$user = User:find(id);
echo $user->toJson();

// 当前输出

{
   "id":1,
   "username":"root",
   "created_at":"2016-12-25 18:23:34",
   "updated_at":"2016-12-25 18:23:34"
}

// 想要的输出

{
   "id":1,
   "username":"root",
   "created_at":1482690214,
   "updated_at":1482690214
}

是否有一种干净的方法来覆盖输出 toJson() 或任何其他方式来实现这一点?

编辑

你认为重写魔术 __get() 是个好主意吗?或者 Eloquent 在调用 toJson 时是否使用其他方式访问属性?

【问题讨论】:

    标签: laravel eloquent timestamp


    【解决方案1】:

    设置所需格式to $dateFormat variable:

    protected $dateFormat = 'U';
    

    默认情况下,时间戳格式为Y-m-d H:i:s。如果您需要自定义时间戳格式,请在您的模型上设置 $dateFormat 属性。该属性决定日期属性在数据库中的存储方式,以及模型序列化为数组或 JSON 时的格式

    https://laravel.com/docs/5.3/eloquent-mutators#date-mutators

    【讨论】:

    • InvalidArgumentException: 第 425 行 ...\vendor\nesbot\carbon\src\Carbon\Carbon.php 中的尾随数据
    • 我在尝试您的解决方案时遇到了这个异常,先生。我做错了什么?
    • @KarimKharba 尝试将迁移更改为使用integer,而不是像answer 中那样使用timestamps
    • 这意味着改变数据库模式(这是我想避免的)。有没有办法将输出功能覆盖到 Json?还是使用突变器?
    • 您可以尝试为created_at 和/或updated_at手动创建accessormutator
    猜你喜欢
    • 2015-08-30
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 2020-12-12
    • 2014-01-24
    • 2014-01-29
    • 1970-01-01
    相关资源
    最近更新 更多