我在配额雄辩模型上有我的$dates
属性,如下所示:
protected $dates = ['start', 'end'];
从数据库检索数据时,这些字段不会设置为Carbon实例,而是设置为字符串。created_at
和updated_at
属性也会发生同样的情况。
知道会发生什么吗?我在MySQL数据库上使用时间戳字段,Laravel版本是5.2。
在模型中尝试以下代码:
public function getStartAttribute($date)
{
return Carbon::parse($date);
}
public function getEndAttribute($date)
{
return Carbon::parse($date);
}
这里的约定是先写get
然后写字段名和attribute
。他们应该一起写骆驼案。因此,在您的情况下,方法名称变为 getStartAttribute
和 getEndAttribute
.
如果表位于用户模型中(可以是其他类似 News 的内容),则可以使用它,
$user = User::find($id);
dump($user->start->format('Y-m-d');
这将转储起始列并将其格式化为 Y-m-d。
还有一种方法可以通过 te 实现这一点,它将数据库的start
列转换为 Carbon 对象并将其作为 start_date
或 startDate
或 StartDate
返回:
public function getStartDateAttribute() {
return Carbon::parse($this->start);
}
您还可以查看Laravel文档:https://laravel.com/docs/5.2/eloquent-mutators#date-mutators
感谢您的帮助,@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');
}
再次感谢!