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

Ger*_*lia 6 php mysql date eloquent laravel-5.2

$dates在Quota Eloquent模型上有我的属性,如下所示:

protected $dates = ['start', 'end'];
Run Code Online (Sandbox Code Playgroud)

从数据库中检索数据时,这些字段不会设置为Carbon实例,而是设置为字符串.同样的事情created_atupdated_at属性.

有什么想法会发生什么?我在MySQL数据库上使用TIMESTAMPS字段,而Laravel版本是5.2.

sma*_*hat 5

在你的模型中试试这个代码:

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

public function getEndAttribute($date)
{
    return Carbon::parse($date);
}
Run Code Online (Sandbox Code Playgroud)

这里的约定是先写get然后字段名和attribute。他们应该一起写在骆驼案中。因此,在您的情况下,方法名称变为getStartAttributeand getEndAttribute

  • IMO,对于应该正确修复的问题,这是一个笨拙的解决方法。 (7认同)

Rob*_*sen 5

如果表位于用户模型中(可以是新闻等其他内容),则可以使用它,

 $user = User::find($id);
 dump($user->start->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)

这将转储起始列并将其格式化为 Ymd。

还有一种方法可以通过以下方法实现此目的,它将start数据库的列转换为 Carbon 对象并将其返回为start_dateor startDateor StartDate

public function getStartDateAttribute() {
    return Carbon::parse($this->start);
}
Run Code Online (Sandbox Code Playgroud)

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