下面由Laravel教程栏目给人人分享8个Laravel模子时日戳应用小技术,看看你都没用过,没用就快来收藏吧,希望对于人人有所帮助!
默认状况下,Laravel Eloquent
模子默认数据表有 created_at
以及 updated_at
两个字段。固然,咱们能够做患上多自界说配置,实现患上多有趣的性能。下面举例说明。
如果数据表不这两个字段,生存数据时 Model::create($arrayOfValues); ——会看到 SQL error
。Laravel
在主动添补 created_at / updated_at
的时刻,无奈找到这两个字段。
禁用主动添补时日戳,只要要在 Eloquent Model
增添上一个属性:
class Role extends Model{public $timestamps = FALSE; // ... 其余的属性以及方法}
倘若以后应用的是非 Laravel
范例的数据库,也便是你的时日戳列的命名形式与此分比方该怎么办? 兴许,它们离别叫做 create_time 以及 update_time。祝贺,你也能够在模子种这么界说:
class Role extends Model{const CREATED_AT = 'create_time';const UPDATED_AT = 'update_time';}
下列内容援用官网文档officialLaraveldocumentation:
默认状况下,时日戳主动体例为 'Y-m-d H:i:s'
。 如果您需要自界说时日戳体例, 能够在你的模子中配置 $dateFormat
属性。这个属性肯定日期在数据库中的存储体例,以及在序列化成数组或者JSON时的体例:
class Flight extends Model{/** * 日期时日的存储体例 * * @var string */protected $dateFormat = 'U';}
当在多对于多的联系瓜葛中,时日戳不会主动添补,比方用户表 users 以及脚色表roles的阁下表role_user。
在这个模子中您能够如许界说瓜葛:
class User extends Model{public function roles(){return $this->belongsToMany(Role::class);}}
而后当你想用户中增添脚色时,能够如许应用:
$roleID = 1;$user->roles()->attach($roleID);
默认状况下,这个阁下表不蕴含时日戳。而且Laravel
不会试验主动添补created_at/updated_at
然而如果你想主动生存时日戳,您需要在迁徙文件中增添created_at/updated_at
,而后在模子的联系瓜葛中加之->withTimestamps();
public function roles(){return $this->belongsToMany(Role::class)->withTimestamps();}
latest()
以及oldest()
停止时日戳排序应历时日戳排序有两个“快速方法”。
取而代之:
User::orderBy('created_at', 'desc')->get();
这么做更快速:
User::latest()->get();
默认状况,latest() 应用 created_at 排序。
与之对于应,有一个 oldest() ,将会这么排序 created_atascending
User::oldest()->get();
固然,也能够应用指定的其余字段排序。比方,如果想要应用 updated_at,能够这么做:
$lastUpdatedUser = User::latest('updated_at')->first();
updated_at
的修改不管何时,当修改 Eloquent
记载,都将会主动应用以后时日戳来保护 updated_at 字段,这是个非常棒的特点。
然而偶然刻你却不想这么做,比方:当增加某个值,认为这不是“整行更新”。
那末,你能够所有如上——只要禁用 timestamps
,记着这是临时的:
$user = User::find(1);$user->profile_views_count = 123;$user->timestamps = false;$user->save();
与上一个例子恰好相同,兴许您需要仅更新updated_at字段,而不扭转其余列。
以是,不发起下面这种写法:
$user->update(['updated_at' => now()]);
您能够应用更快速的方法:
$user->touch();
另一种状况,偶然刻您不仅希望更新以后模子的updated_at,也希望更新下级瓜葛的记载。
比方,某个co妹妹ent被更新,那末您希望将post表的updated_at
也更新。
那末,您需要在模子中界说$touches
属性:
class Co妹妹ent extends Model { protected $touches = ['post']; public function post(){return $this->belongsTo('Post');} }
Carbon
类最后一个技术,但更像是一个展现,因为您应当已经通晓它。
默认状况下,created_at以及updated_at字段被主动转换为$dates,以是您不需要将他们转换为Carbon
实例,就能够应用Carbon
的方法。
比方:
$user->created_at->addDays(3);now()->diffInDays($user->updated_at);
网友评论