文章是转载的,可以看原文:https://www.cnblogs.com/huangshoushi/p/6378288.html
PS:我用laravel的php artisan make:auth命令建立了一套laravel自身创建的的模板和方法,创建用户的时候遇到一些问题。
当然你需要自己配置和建立数据库。至于数据的创建规则,auth只要求的三个字段【name,email,password】,再算上你自己写的created_at和updated_at两个字段,一共五个字段。其他的自己按照自己的需求进行创建和修改吧。
我的时间字段是int类型的,但是每次sql生成的时候都是YYYY-mm-dd这样的格式,比较蛋疼,所以想要时间戳类型的,于是想到了laravel的时间的自动完成功能。
以下就是时间自动完成的别人写的介绍,但是我用auth的时候不知道写在哪里,仔细想了以下,这个功能是根据Eloquent来完成的。那么我写到创建用户方法对应的模型里就可以了,因为auth的create方法模型也是继承了Model。下面再看一下别人写的东西吧,写的肯定是比我好的。我写的只是为了记录操作过程。不做技术指导 = =|||
---------------------------------------------我是分割线----------------------------------------------
相信对于 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 带给你的快感吧!