Php Laravel雄辩-日期属性未作为碳对象检索

Php Laravel雄辩-日期属性未作为碳对象检索,php,mysql,date,eloquent,laravel-5.2,Php,Mysql,Date,Eloquent,Laravel 5.2,我将我的$dates属性放在配额雄辩的模型上,如下所示: protected $dates = ['start', 'end']; 当从数据库中检索数据时,这些字段不会被设置为Carbon实例,而是字符串。在中创建的和在属性中更新的也会发生同样的情况 你知道会发生什么吗?我在MySQL数据库上使用时间戳字段,Laravel版本为5.2。在您的模型中尝试以下代码: public function getStartAttribute($date) { return Carbon::pars

我将我的
$dates
属性放在配额雄辩的模型上,如下所示:

protected $dates = ['start', 'end'];
当从数据库中检索数据时,这些字段不会被设置为Carbon实例,而是字符串。在中创建的
和在
属性中更新的
也会发生同样的情况


你知道会发生什么吗?我在MySQL数据库上使用时间戳字段,Laravel版本为5.2。

在您的模型中尝试以下代码:

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

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

这里的惯例是首先写入
get
,然后是字段名和
属性。他们应该用驼色字体写在一起。因此,在您的情况下,方法名称变成
getstartatAttribute
getEndAttribute
谢谢您的帮助,@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');
}

再次感谢

如果表格在用户模型中(可以是新闻之类的内容),则可以使用此选项

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

使用te following还有一种实现方法,它将数据库的
start
列转换为碳对象,并将其作为
start\u date
startDate
返回:

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

您还可以查看Laravel文档:

您是否将
开始
结束
字段创建为
时间戳
日期时间
?我使用的是时间戳。依我看,这是一个需要正确修复的问题的笨拙解决方法。理想情况下,设置$casts数组应该可以使用,但这似乎已经被打破多年了:(。这是使用访问器的唯一解决方法。有一种更简单的方法。
$this->start->format(…)
在访问器中。我还建议您以不同的方式命名访问器(如
formattedStart
或其他),因此您仍然可以在代码中使用
$this->start
Carbon对象。
public function getStartDateAttribute() {
    return Carbon::parse($this->start);
}