我有一个配额雄辩模型我$dates
属性是这样的:Laravel雄辩 - 日期属性不被取出作为碳对象
protected $dates = ['start', 'end'];
当从数据库检索数据,这些字段没有被设置为Carbon实例,但字符串。同样发生在created_at
和updated_at
属性中。
任何想法可能发生什么?我在MySQL DB上使用TIMESTAMPS字段,而Laravel版本是5.2。
我有一个配额雄辩模型我$dates
属性是这样的:Laravel雄辩 - 日期属性不被取出作为碳对象
protected $dates = ['start', 'end'];
当从数据库检索数据,这些字段没有被设置为Carbon实例,但字符串。同样发生在created_at
和updated_at
属性中。
任何想法可能发生什么?我在MySQL DB上使用TIMESTAMPS字段,而Laravel版本是5.2。
试试这个代码在你的模型:
public function getStartAttribute($date)
{
return Carbon::parse($date);
}
public function getEndAttribute($date)
{
return Carbon::parse($date);
}
这里的惯例是先写get
然后字段名称和attribute
。他们应该一起写骆驼案件。所以,在你的情况下,方法名称变成getStartAttribute
和getEndAttribute
。
国际海事组织,这是一个kludgy解决方法,应该适当修复的东西。 – ceejayoz
感谢您的帮助,@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');
}
再次感谢!
有一个更简单的方法。 '$ this-> start-> format(...)'在你的访问器中。我还建议以不同的方式命名您的访问器(如'formattedStart'或其他),所以您仍然可以在代码中使用'$ this-> start'碳对象。 – ceejayoz
你可以使用这个如果表在用户模式(可以是别的东西像新闻),
$user = User::find($id);
dump($user->start->format('Y-m-d');
这将转储开始列,并将其格式化为Y-M-d。
还有一种方法用TE以下,以实现这一目标,它会转换start
列数据库碳对象并返回它作为start_date
或startDate
或StartDate
:
public function getStartDateAttribute() {
return Carbon::parse($this->start);
}
你也可以看看在Laravel文档中:https://laravel.com/docs/5.2/eloquent-mutators#date-mutators
您是否将'start'和'end'字段创建为'timestamps'或'datetimes'? – user2094178
我正在使用时间戳。 –