2016-03-15 90 views
3

我有一個配額雄辯模型我$dates屬性是這樣的:Laravel雄辯 - 日期屬性不被取出作爲碳對象

protected $dates = ['start', 'end']; 

當從數據庫檢索數據,這些字段沒有被設置爲Carbon實例,但字符串。同樣發生在created_atupdated_at屬性中。

任何想法可能發生什麼?我在MySQL DB上使用TIMESTAMPS字段,而Laravel版本是5.2。

+0

您是否將'start'和'end'字段創建爲'timestamps'或'datetimes'? – user2094178

+0

我正在使用時間戳。 –

回答

0

試試這個代碼在你的模型:

public function getStartAttribute($date) 
{ 
    return Carbon::parse($date); 
} 

public function getEndAttribute($date) 
{ 
    return Carbon::parse($date); 
} 

這裏的慣例是先寫get然後字段名稱和attribute。他們應該一起寫駱駝案件。所以,在你的情況下,方法名稱變成getStartAttributegetEndAttribute

+2

國際海事組織,這是一個kludgy解決方法,應該適當修復的東西。 – ceejayoz

0

感謝您的幫助,@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'); 
} 

再次感謝!

+0

有一個更簡單的方法。 '$ this-> start-> format(...)'在你的訪問器中。我還建議以不同的方式命名您的訪問器(如'formattedStart'或其他),所以您仍然可以在代碼中使用'$ this-> start'碳對象。 – ceejayoz

3

你可以使用這個如果表在用戶模式(可以是別的東西像新聞),

$user = User::find($id); 
dump($user->start->format('Y-m-d'); 

這將轉儲開始列,並將其格式化爲Y-M-d。

還有一種方法用TE以下,以實現這一目標,它會轉換start列數據庫碳對象並返回它作爲start_datestartDateStartDate

public function getStartDateAttribute() { 
    return Carbon::parse($this->start); 
} 

你也可以看看在Laravel文檔中:https://laravel.com/docs/5.2/eloquent-mutators#date-mutators