Laravel Eloquent - 日期属性未作为 Carbon 对象检索

Laravel Eloquent - date attributes not being retrieved as Carbon objects

我在配额 Eloquent 模型上得到了我的 $dates 属性,如下所示:

protected $dates = ['start', 'end'];

从数据库中检索数据时,这些字段未设置为 Carbon 实例,而是设置为字符串。 created_atupdated_at 属性也是如此。

知道会发生什么吗?我在 MySQL 数据库上使用 TIMESTAMPS 字段,Laravel 版本是 5.2。

在您的模型中尝试此代码:

public function getStartAttribute($date)
{
    return Carbon::parse($date);
}

public function getEndAttribute($date)
{
    return Carbon::parse($date);
}

这里的约定是先写get,然后写字段名和attribute。他们应该用驼峰式写在一起。因此,在您的情况下,方法名称变为 getStartAttributegetEndAttribute.

感谢@smartrahat 和@user2094178 的帮助。我错了,属性实际上是作为 Carbon 对象检索的。我很困惑,因为在尝试使用这些访问器格式化我的日期时遇到错误:

public function getStartAttribute($value)
{
    return $value->format('d/m/Y');
}

public function getEndAttribute($value)
{
    return $value->format('d/m/Y');
}

似乎此时值已经转换为字符串(即我不能使用 Carbon::format() 方法)。所以我最终采用了这种方法:

public function getStartAttribute($value)
{
    return Carbon::parse($value)->format('d/m/Y');
}

public function getEndAttribute($value)
{
    return Carbon::parse($value)->format('d/m/Y');
}

再次感谢!

如果 table 在用户模型中(可以是新闻等其他内容),您可以使用它,

 $user = User::find($id);
 dump($user->start->format('Y-m-d');

这将转储起始列并将其格式化为 Y-m-d。

还有一种方法可以通过以下方式实现这一点,它将数据库的 start 列转换为 Carbon 对象,并 return 将其转换为 start_datestartDateStartDate:

public function getStartDateAttribute() {
    return Carbon::parse($this->start);
}

您还可以查看 Laravel 文档:https://laravel.com/docs/5.2/eloquent-mutators#date-mutators