默认情况下,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进阶相关资料私聊管理即可

点此加入该群​jq.qq.com

分享8个laravel模型时间戳使用技巧的更多相关文章

  1. PHP程序Laravel框架的优化技巧

    Laravel是一套简洁.优雅的php Web开发框架(PHP Web Framework).它可以让你从杂乱的代码中解脱出来,可以帮你构建一个完美的网络app,而且每行代码都简洁.富于表达力.而性能 ...

  2. Laravel 模型事件入门

    Laravel 模型事件允许你监听模型生命周期内的多个关键点,甚至可以在阻止一个模型的保存或者删除. Laravel 模型事件文档 概述了如何使用钩子将对应事件与相关的事件类型关联起来,但是本文的主旨 ...

  3. 50分钟学会Laravel 50个小技巧

    50分钟学会Laravel 50个小技巧 时间 2015-12-09 17:13:45  Yuansir-web菜鸟 原文  http://www.yuansir-web.com/2015/12/09 ...

  4. Facebook内部分享:25个高效工作的小技巧

    Facebook内部分享:25个高效工作的小技巧 Facebook 内部分享:不论你如何富有,你都赚不到更多的时间,你也回不到过去.没有那么多的假如,只有指针滴答的时光飞逝和你应该好好把握的现在,以下 ...

  5. 50分钟学会Laravel 50个小技巧(基于laravel5.2,仅供参考)

    转载请注明:转载自 Yuansir-web菜鸟 | LAMP学习笔记 本文链接地址: 50分钟学会Laravel 50个小技巧 原文链接:< 50 Laravel Tricks in 50 Mi ...

  6. Linux查看History记录加时间戳小技巧

    Linux查看History记录加时间戳小技巧 熟悉bash的都一定知道使用history可以输出你曾经输入过的历史命令,例如[root@servyou_web ~]# history | more ...

  7. laravel模型中非静态方法也能静态调用的原理

    刚开始用laravel模型时,为了方便一直写静态方法,进行数据库操作. <?php namespace App\Models; use Illuminate\Database\Eloquent\ ...

  8. Laravel模型事件的实现原理详解

    模型事件在 Laravel 的世界中,你对 Eloquent 大多数操作都会或多或少的触发一些模型事件,下面这篇文章主要给大家介绍了关于Laravel模型事件的实现原理,文中通过示例代码介绍的非常详细 ...

  9. Laravel 5 性能优化技巧

    说明 性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论. 这里是简单的列表 ...

随机推荐

  1. Elasticsearch 开箱指南

    内容概要 ES 基础介绍,重点是其中的核心概念. 基础 API 实践操作. 1. 基础介绍 Elasticsearch (ES) 是一个数据库,提供了分布式的.准实时搜索和分析. 基于 Apache ...

  2. Nmap使用教程(一)

    基本扫描技术 扫描单个网络 nmap 192.168.1.1/www.baidu.com 扫描多个网络/目标 nmap 192.168.1.1 192.168.1.2 #将扫描同个网段内不同的ip地址 ...

  3. 电脑开机后多了OneKey Ghost启动选项怎么解决

    原文地址:http://www.xitongcheng.com/jiaocheng/dnrj_article_18745.html 大多数用户在使用OneKey Ghost安装电脑系统后,会在开机启动 ...

  4. 如何查看Ubuntu服务器上Django项目的MySQL服务有没有挂?

    如果你在项目内输入:MySQL -uroot -p 接着输入密码之后返回ERROR:1045……如下图 那么这就说明MySQL服务挂了. 需要重新启动一下 重启时在项目目录下输入:sudo servi ...

  5. 看透Spring MVC:源代码分析与实践 (Web开发技术丛书)

    第一篇 网站基础知识 第1章 网站架构及其演变过程2 1.1 软件的三大类型2 1.2 基础的结构并不简单3 1.3 架构演变的起点5 1.4 海量数据的解决方案5 1.4.1 缓存和页面静态化5 1 ...

  6. 双指针,BFS和图论(二)

    (一)BFS 1.地牢大师 你现在被困在一个三维地牢中,需要找到最快脱离的出路! 地牢由若干个单位立方体组成,其中部分不含岩石障碍可以直接通过,部分包含岩石障碍无法通过. 向北,向南,向东,向西,向上 ...

  7. export 和 export default 的区别

    export命令用于规定模块的对外接口. 一个模块就是一个独立的文件.该文件内部的所有变量,外部无法获取.如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量.下面是一个 ...

  8. Docker和Kubernetes

    Docker和Kubernetes Docker Docker是一个容器的开放平台,但它不是最早的.自20世纪70年代以来,容器平台一直存在.他们的开发可以追溯到Unix中的chroot系统调用.在2 ...

  9. Oracle数据库安装与卸载

    一.下载俩个压缩包,同时选中解压到一个文件夹中 二.点击step.exe(win10可能弹出不满足环境要求,选择是就行了) 三.把接收更新勾掉不需要 四.选择创建和配置数据库 五.选择服务器类 六.选 ...

  10. 暑假第一周总结(在centos虚拟机上安装jdk以及hadoop并对hadoop进行配置)

    本周主要就是对虚拟机进行安装并在上边安装jdk以及hadoop并对其进行配置. 在看林子雨老师的教程时,下载了老师所给的全套的下载软件,在安装时发现老师所给的VirtualBox安装后无法正常启动,尝 ...