Laravel 5 如何在 select 子句中使用 Carbon 转换日期相关列?
Posted
技术标签:
【中文标题】Laravel 5 如何在 select 子句中使用 Carbon 转换日期相关列?【英文标题】:Laravel 5 How to convert date related column using Carbon in select clause? 【发布时间】:2016-10-27 11:41:44 【问题描述】:我是 php 和 laravel 的新手,并且使用 laravel 5.2 和 MariaDB 10.1.xx。
测试表有索引和日期 (yyyymmdd) 列。
我想将日期格式从 yyyymmdd 转换为 YYYYmm,而不在 select 子句中使用原始查询。
我试过如下:
$test = DB::table('test')
->select( 'idx',Carbon::parse('date')->format('Ym') );
并得到如下错误:
DateTime::__construct(): Failed to parse time string (date) at position 0 (n): The timezone could not be found in the database.
请让我知道如何使用 carbon not raw 查询来解决这个问题。
【问题讨论】:
【参考方案1】:在您的模型 (Test
) 中添加受保护的字段 $dates
:
class Test
//...
protected $dates = ['created_at', 'updated_at', 'date'];
//...
这告诉 Eloquent 字段 date
(以及默认的时间戳字段)包含一个日期。 $entity->date
现在将包含 Carbon
实例,用于类型为 Test
的实体。您可以使用它来格式化日期 ($entity->date->format('Ym');
)
你甚至可以写一个Accessor 来为你做这件事:
class Test
//...
public function getFormattedDateAttribute()
return $this->attributes['date']->format('Ym');
//...
echo $entity->formatted_date;
【讨论】:
【参考方案2】:其他选择是在你的模型中使用类似的修改器
public function getDateAttribute($value)
return Carbon::createFromFormat('Y-m-d', $value)->toDateTimeString();
您可以根据需要更改或使用它
【讨论】:
以上是关于Laravel 5 如何在 select 子句中使用 Carbon 转换日期相关列?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 5.8 中使 chart.js 动画/增长/活着?