Php 返回laravel中datetime格式字段的unix时间戳格式

Php 返回laravel中datetime格式字段的unix时间戳格式,php,laravel,Php,Laravel,我有一个消息模型如下: class Message extends Model { protected $primaryKey = 'message_id'; protected $dates = ['created_at', 'updated_at', 'receiver_deleted_at', 'sender_deleted_at', 'sender_read_at', 'receiver_read_at']; } 如您所见,有些日期字段将日期保存为DATETI

我有一个
消息
模型如下:

class Message extends Model
{
    protected $primaryKey = 'message_id';
    protected $dates      = ['created_at', 'updated_at', 'receiver_deleted_at', 'sender_deleted_at', 'sender_read_at', 'receiver_read_at'];
}
如您所见,有些日期字段将日期保存为DATETIME(YYYY-MM-DD HH:MM:SS)格式

但我想在获取模型实例时,将所有日期字段转换为unix timestamp格式,然后返回

我知道每个字段都可以使用这样的访问器:

public function getCreatedAtAttribute()
{
    dd(strtotime($this->attributes['created_at']));
    return strtotime($this->attributes['created_at']);
}
但在这种情况下,我必须为每个字段定义一个如上所述的函数


但我需要一种更简单的方法,强制模型以unix时间戳格式返回日期字段。

您可以覆盖:

protected function getDateFormat()
{
 return 'U';
}

对每列使用时间戳属性:

$model->created_at->timestamp

参考:

您可以覆盖模型中的
asDateTime()
方法:

protected function asDateTime($value)
{
    return Carbon::parse($value)->timestamp;
}
它的工作原理与您为
$dates
数组中的每个日期创建访问器一样(包括
处创建的日期和
处更新的日期)


在模型中,只需添加这些cast即可获得unix时间戳

访问器负责转换为Carbon实例,该实例是默认DateTime的扩展。所以,
$this->created_at->format('U')应该可以工作。@TomLank.,我想在调用模型转换格式returnedI的实例时添加
getDateFormat
函数,但出现了以下错误:
跟踪数据
我尝试了您的代码并将其添加到模型中,但在这种情况下,我遇到了以下错误:
参数1传递给了illumb\\Database\\elount\\model::serializeDate()必须在第2446行实现接口DateTimeInterface,给定整数,在D:\\wamp\\www\\pars app\\vendor\\laravel\\framework\\src\\illumb\\Database\\elounce\\Model.php中调用,并定义了
@A.B.Developer可能您没有删除强制转换属性或访问器之类的内容?在发布之前我已经试过了,它在5.3中运行得非常好。我没有任何与日期字段相关的cast属性或访问器。
    protected $casts = [
    'created_at' => 'timestamp',
    'updated_at' => 'timestamp'
  ];