2016-03-15 57 views
3

我有一个配额雄辩模型我$dates属性是这样的:Laravel雄辩 - 日期属性不被取出作为碳对象

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

当从数据库检索数据,这些字段没有被设置为Carbon实例,但字符串。同样发生在created_atupdated_at属性中。

任何想法可能发生什么?我在MySQL DB上使用TIMESTAMPS字段,而Laravel版本是5.2。

+0

您是否将'start'和'end'字段创建为'timestamps'或'datetimes'? – user2094178

+0

我正在使用时间戳。 –

回答

0

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

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

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

这里的惯例是先写get然后字段名称和attribute。他们应该一起写骆驼案件。所以,在你的情况下,方法名称变成getStartAttributegetEndAttribute

+2

国际海事组织,这是一个kludgy解决方法,应该适当修复的东西。 – ceejayoz

0

感谢您的帮助,@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'); 
} 

再次感谢!

+0

有一个更简单的方法。 '$ this-> start-> format(...)'在你的访问器中。我还建议以不同的方式命名您的访问器(如'formattedStart'或其他),所以您仍然可以在代码中使用'$ this-> start'碳对象。 – ceejayoz

3

你可以使用这个如果表在用户模式(可以是别的东西像新闻),

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

这将转储开始列,并将其格式化为Y-M-d。

还有一种方法用TE以下,以实现这一目标,它会转换start列数据库碳对象并返回它作为start_datestartDateStartDate

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

你也可以看看在Laravel文档中:https://laravel.com/docs/5.2/eloquent-mutators#date-mutators