我有一個配額雄辯模型我$dates
屬性是這樣的:Laravel雄辯 - 日期屬性不被取出作爲碳對象
protected $dates = ['start', 'end'];
當從數據庫檢索數據,這些字段沒有被設置爲Carbon實例,但字符串。同樣發生在created_at
和updated_at
屬性中。
任何想法可能發生什麼?我在MySQL DB上使用TIMESTAMPS字段,而Laravel版本是5.2。
我有一個配額雄辯模型我$dates
屬性是這樣的:Laravel雄辯 - 日期屬性不被取出作爲碳對象
protected $dates = ['start', 'end'];
當從數據庫檢索數據,這些字段沒有被設置爲Carbon實例,但字符串。同樣發生在created_at
和updated_at
屬性中。
任何想法可能發生什麼?我在MySQL DB上使用TIMESTAMPS字段,而Laravel版本是5.2。
試試這個代碼在你的模型:
public function getStartAttribute($date)
{
return Carbon::parse($date);
}
public function getEndAttribute($date)
{
return Carbon::parse($date);
}
這裏的慣例是先寫get
然後字段名稱和attribute
。他們應該一起寫駱駝案件。所以,在你的情況下,方法名稱變成getStartAttribute
和getEndAttribute
。
國際海事組織,這是一個kludgy解決方法,應該適當修復的東西。 – ceejayoz
感謝您的幫助,@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');
}
再次感謝!
有一個更簡單的方法。 '$ this-> start-> format(...)'在你的訪問器中。我還建議以不同的方式命名您的訪問器(如'formattedStart'或其他),所以您仍然可以在代碼中使用'$ this-> start'碳對象。 – ceejayoz
你可以使用這個如果表在用戶模式(可以是別的東西像新聞),
$user = User::find($id);
dump($user->start->format('Y-m-d');
這將轉儲開始列,並將其格式化爲Y-M-d。
還有一種方法用TE以下,以實現這一目標,它會轉換start
列數據庫碳對象並返回它作爲start_date
或startDate
或StartDate
:
public function getStartDateAttribute() {
return Carbon::parse($this->start);
}
你也可以看看在Laravel文檔中:https://laravel.com/docs/5.2/eloquent-mutators#date-mutators
您是否將'start'和'end'字段創建爲'timestamps'或'datetimes'? – user2094178
我正在使用時間戳。 –