分享8个laravel模型时间戳使用技巧

默认情况下,Laravel Eloquent 模型默认数据表有 created_at 和 updated_at 两个字段。当
然,我们可以做很多自定义配置,实现很多有趣的功能。下面举例说明。
1. 禁用时间戳
如果数据表没有这两个字段,保存数据时 Model::create($arrayOfValues); —— 会看到 SQL
error。Laravel 在自动填充 created_at / updated_at 的时候,无法找到这两个字段。
禁用自动填充时间戳,只需要在 Eloquent Model 添加上一个属性:
class Role extends Model
{
public $timestamps = FALSE;
// ... 其他的属性和方法
}
2. 修改时间戳默认列表
假如当前使用的是非 Laravel 类型的数据库,也就是你的时间戳列的命名方式与此不同该怎
么办? 也许,它们分别叫做 create_time 和 update_time。恭喜,你也可以在模型种这么
定义:
class Role extends Model
{
const CREATED_AT = 'create_time';
const UPDATED_AT = 'update_time';
3. 修改时间戳日期 / 时间格式
以下内容引用官网文档 official Laravel documentation:
默认情况下,时间戳自动格式为 'Y-m-d H:i:s'。 如果您需要自定义时间戳格式,可以在你的
模型中设置 $dateFormat 属性。这个属性确定日期在数据库中的存储格式,以及在序列化成
数组或 JSON 时的格式:
class Flight extends Model
{
/**
* 日期时间的存储格式
*
* @var string */
protected $dateFormat = 'U';
}
4. 多对多:带时间戳的中间表
当在多对多的关联中,时间戳不会自动填充,例如 用户表 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();
}
5. 使用 latest() 和 oldest() 进行时间戳排序
使用时间戳排序有两个 “快捷方法”。
取而代之:
User::orderBy('created_at', 'desc')->get();
这么做更快捷:
User::latest()->get();
默认情况,latest() 使用 created_at 排序。
与之对应,有一个 oldest() ,将会这么排序 created_at ascending
User::oldest()->get();
当然,也可以使用指定的其他字段排序。例如,如果想要使用 updated_at,可以这么做:
$lastUpdatedUser = User::latest('updated_at')->first();
6. 不触发 updated_at 的修改
无论何时,当修改 Eloquent 记录,都将会自动使用当前时间戳来维护 updated_at 字段,
这是个非常棒的特性。
但是有时候你却不想这么做,例如:当增加某个值,认为这不是 “整行更新”。
那么,你可以一切如上 —— 只需禁用 timestamps,记住这是临时的:
$user = User::find(1);
$user->profile_views_count = 123;
$user->timestamps = false;
$user->save();
7. 仅更新时间戳和关联时间戳
与上一个例子恰好相反,也许您需要仅更新 updated_at 字段,而不改变其他列。
所以,不建议下面这种写法:
$user->update(['updated_at' => now()]);
您可以使用更快捷的方法:
$user->touch();
另一种情况,有时候您不仅希望更新当前模型的 updated_at,也希望更新上级关系的记录。
例如,某个 comment 被更新,那么您希望将 post 表的 updated_at 也更新。
那么,您需要在模型中定义 $touches 属性:
class Comment extends Model {
protected $touches = ['post'];
public function post()
{
return $this->belongsTo('Post');
}
}
8. 时间戳字段自动转换 Carbon 类
最后一个技巧,但更像是一个提醒,因为您应该已经知道它。
默认情况下,created_at 和 updated_at 字段被自动转换为 $dates,
所以您不需要将他们转换为 Carbon 实例,即可以使用 Carbon 的方法。
例如:
$user->created_at->addDays(3);
now()->diffInDays($user->updated_at);
就这样,快速但希望有用的提示!
有需要学习交流的友人请加入交流群的咱们一起,群内都是1-7年的开发者,希望可以一起交流,探讨swoole这块的技术 或者有其他php问题 也可以问,获取swoole或者php进阶相关资料私聊管理即可

分享8个laravel模型时间戳使用技巧的更多相关文章
- PHP程序Laravel框架的优化技巧
Laravel是一套简洁.优雅的php Web开发框架(PHP Web Framework).它可以让你从杂乱的代码中解脱出来,可以帮你构建一个完美的网络app,而且每行代码都简洁.富于表达力.而性能 ...
- Laravel 模型事件入门
Laravel 模型事件允许你监听模型生命周期内的多个关键点,甚至可以在阻止一个模型的保存或者删除. Laravel 模型事件文档 概述了如何使用钩子将对应事件与相关的事件类型关联起来,但是本文的主旨 ...
- 50分钟学会Laravel 50个小技巧
50分钟学会Laravel 50个小技巧 时间 2015-12-09 17:13:45 Yuansir-web菜鸟 原文 http://www.yuansir-web.com/2015/12/09 ...
- Facebook内部分享:25个高效工作的小技巧
Facebook内部分享:25个高效工作的小技巧 Facebook 内部分享:不论你如何富有,你都赚不到更多的时间,你也回不到过去.没有那么多的假如,只有指针滴答的时光飞逝和你应该好好把握的现在,以下 ...
- 50分钟学会Laravel 50个小技巧(基于laravel5.2,仅供参考)
转载请注明:转载自 Yuansir-web菜鸟 | LAMP学习笔记 本文链接地址: 50分钟学会Laravel 50个小技巧 原文链接:< 50 Laravel Tricks in 50 Mi ...
- Linux查看History记录加时间戳小技巧
Linux查看History记录加时间戳小技巧 熟悉bash的都一定知道使用history可以输出你曾经输入过的历史命令,例如[root@servyou_web ~]# history | more ...
- laravel模型中非静态方法也能静态调用的原理
刚开始用laravel模型时,为了方便一直写静态方法,进行数据库操作. <?php namespace App\Models; use Illuminate\Database\Eloquent\ ...
- Laravel模型事件的实现原理详解
模型事件在 Laravel 的世界中,你对 Eloquent 大多数操作都会或多或少的触发一些模型事件,下面这篇文章主要给大家介绍了关于Laravel模型事件的实现原理,文中通过示例代码介绍的非常详细 ...
- Laravel 5 性能优化技巧
说明 性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论. 这里是简单的列表 ...
随机推荐
- Elasticsearch 开箱指南
内容概要 ES 基础介绍,重点是其中的核心概念. 基础 API 实践操作. 1. 基础介绍 Elasticsearch (ES) 是一个数据库,提供了分布式的.准实时搜索和分析. 基于 Apache ...
- Nmap使用教程(一)
基本扫描技术 扫描单个网络 nmap 192.168.1.1/www.baidu.com 扫描多个网络/目标 nmap 192.168.1.1 192.168.1.2 #将扫描同个网段内不同的ip地址 ...
- 电脑开机后多了OneKey Ghost启动选项怎么解决
原文地址:http://www.xitongcheng.com/jiaocheng/dnrj_article_18745.html 大多数用户在使用OneKey Ghost安装电脑系统后,会在开机启动 ...
- 如何查看Ubuntu服务器上Django项目的MySQL服务有没有挂?
如果你在项目内输入:MySQL -uroot -p 接着输入密码之后返回ERROR:1045……如下图 那么这就说明MySQL服务挂了. 需要重新启动一下 重启时在项目目录下输入:sudo servi ...
- 看透Spring MVC:源代码分析与实践 (Web开发技术丛书)
第一篇 网站基础知识 第1章 网站架构及其演变过程2 1.1 软件的三大类型2 1.2 基础的结构并不简单3 1.3 架构演变的起点5 1.4 海量数据的解决方案5 1.4.1 缓存和页面静态化5 1 ...
- 双指针,BFS和图论(二)
(一)BFS 1.地牢大师 你现在被困在一个三维地牢中,需要找到最快脱离的出路! 地牢由若干个单位立方体组成,其中部分不含岩石障碍可以直接通过,部分包含岩石障碍无法通过. 向北,向南,向东,向西,向上 ...
- export 和 export default 的区别
export命令用于规定模块的对外接口. 一个模块就是一个独立的文件.该文件内部的所有变量,外部无法获取.如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量.下面是一个 ...
- Docker和Kubernetes
Docker和Kubernetes Docker Docker是一个容器的开放平台,但它不是最早的.自20世纪70年代以来,容器平台一直存在.他们的开发可以追溯到Unix中的chroot系统调用.在2 ...
- Oracle数据库安装与卸载
一.下载俩个压缩包,同时选中解压到一个文件夹中 二.点击step.exe(win10可能弹出不满足环境要求,选择是就行了) 三.把接收更新勾掉不需要 四.选择创建和配置数据库 五.选择服务器类 六.选 ...
- 暑假第一周总结(在centos虚拟机上安装jdk以及hadoop并对hadoop进行配置)
本周主要就是对虚拟机进行安装并在上边安装jdk以及hadoop并对其进行配置. 在看林子雨老师的教程时,下载了老师所给的全套的下载软件,在安装时发现老师所给的VirtualBox安装后无法正常启动,尝 ...