我是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.
请让我有任何想法使用碳非原始查询来解决这个问题。
答案 0 :(得分: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;
答案 1 :(得分:0)
其他选择是在模型中使用类似
的mutatorpublic function getDateAttribute($value){
return Carbon::createFromFormat('Y-m-d', $value)->toDateTimeString();
}
您可以根据需要更改或使用