laravel创建和查询时⾃动转换created_at和updated_at时间格
式
相信对于 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
unix时间戳转换日期格式*/
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 带给你的快感吧!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论