Laravel 5如何在select子句中使用Carbon转换与日期相关的列?

时间:2016-06-24 19:02:32

标签: php mysql laravel laravel-5

我是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.

请让我有任何想法使用碳非原始查询来解决这个问题。

2 个答案:

答案 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)

其他选择是在模型中使用类似

的mutator
public function getDateAttribute($value){
    return Carbon::createFromFormat('Y-m-d', $value)->toDateTimeString();

}

您可以根据需要更改或使用