在laravel

时间:2017-04-22 11:33:05

标签: php laravel

我有一个Message这样的模型:

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-timestamp格式返回。

3 个答案:

答案 0 :(得分:1)

您可以覆盖:

$model->created_at->timestamp

OR

为每列使用timestamp属性:

{{1}}

参考:https://laravel.com/docs/4.2/eloquent#timestamps

答案 1 :(得分:1)

    protected $casts = [
    'created_at' => 'timestamp',
    'updated_at' => 'timestamp'
  ];

在模型中,只需添加这些演员表以获得unix时间戳

答案 2 :(得分:0)

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

protected function asDateTime($value)
{
    return Carbon::parse($value)->timestamp;
}

它就像你为$dates数组中的每个日期创建一个访问者一样(包括created_atupdated_at)。