簡體   English   中英

Laravel 5如何在select子句中使用Carbon轉換與日期相關的列?

[英]Laravel 5 How to convert date related column using Carbon in select clause?

我是php和laravel的新手,並在MariaDB 10.1.xx中使用laravel 5.2。

測試表具有索引和日期(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.

請讓我有任何想法來解決這個問題,而不是使用無碳查詢。

在模型( Test )中,添加受保護的字段$dates

class Test {
    //...
    protected $dates = ['created_at', 'updated_at', 'date'];
    //...
}

這告訴Eloquent字段date (和默認的timestamp-fields)包含一個日期。 $entity->date現在將包含類型為Test的實體的Carbon實例。 您可以使用它來格式化日期( $entity->date->format('Ym');

你甚至可以寫一個訪問器為你這樣做:

class Test {
    //...
    public function getFormattedDateAttribute() {
        return $this->attributes['date']->format('Ym');
    }
    //...
}
echo $entity->formatted_date;

另一種選擇是在模型中使用變體,例如

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

}

您可以根據需要進行更改或使用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM