相信對於 Laravel 提供了自動的 timestamps 莞式服務 讓大家一定很舒服吧!
只要大家在數據庫表中創建了 craeted_at
和 updated_at
字段之后, Laravel 已經准備好了給你提供各種服務了 ^^。比如說,模型繼承了 Eloquent
之后,便會在 $model->save()
$model->update()
$model->push()
$model->touch()
的時候更新時間戳字段。對,全自動哦,完全你不用動,不用去刻意安排,一切都給你搞定了,真的很爽哦。
當然,禁止它們這種體貼的行為很簡單,只要在繼承的模型里面這樣寫就可以了
class User extends Eloquent { public $timestamps = false; }
嗯,設置 $timestamps = false
既可。
可是,這么好用的,堪稱完美的服務為什么不用呢?為什么呢?我也很納悶。
呃,難道因為它是標准的日期時間類型嗎?而你喜歡在項目里面用上分分鍾都無法計算出來哪一天的unix時間戳?
好吧,你說這是因為老項目數據庫的原因,原諒你一回。下面就告訴你怎么搞定它,讓它如你所願,好讓你爽到爆!
class BaseModel extends Eloquent { /** * 默認使用時間戳戳功能 * * @var bool */ public $timestamps = true; /** * 獲取當前時間 * * @return int */ public function freshTimestamp() { return time(); } /** * 避免轉換時間戳為時間字符串 * * @param DateTime|int $value * @return DateTime|int */ public function fromDateTime($value) { return $value; } /** * select的時候避免轉換時間為Carbon * * @param mixed $value * @return mixed */ // protected function asDateTime($value) { // return $value; // } /** * 從數據庫獲取的為獲取時間戳格式 * * @return string */ public function getDateFormat() { return 'U'; } }
你可以會注意到了我這里注釋掉了 asDateTime
這個方法。在這里,我想在模型對象讀取這兩個字段的時候輸出的是標准的日期時間字符串,這樣的話我就可以省點力去轉換了。
如果你想只獲取日期的話,可以用這樣的姿勢獲得結果:
$model->created_at->format('Y-m-d');
還有,注意啊,你的數據庫字段一定別再是 datetime
了,換成 int 型吧。
靜靜享受 Laravel 自動維護 timestamps 帶給你的快感吧!