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