百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

3分钟短文 | Laravel SQL筛选两个日期之间的记录,怎么写?

liuian 2025-06-30 18:00 71 浏览

引言

今天说一个细分的需求,在模型中,或者使用laravel提供的 Eloquent ORM 功能,构造查询语句时,返回位于两个指定的日期之间的条目。应该怎么写?

本文通过几个例子,为大家梳理一下。

学习时间

假设有一个模型 Reservation,我们查询某个日期的预订条目数,首先构造日期字符串,使用内置函数:

$now = date('Y-m-d');

返回当前日期。然后调用模型的 where 查询语句:

$reservations = Reservation::where('reservation_from', $now)->get();

上一条生成的SQL语句如下:

select * from table_name where reservation_from = $now

只会返回日期比较相等的条目。如何实现在 from 和 to 之间的日期呢,类似下面这样:

SELECT * FROM table_name WHERE reservation_from BETWEEN '$from' AND '$to

在laravel中你可以使用 whereBetween 这个查询子句。首先构造起始和结束日期:

$from = date('2020-01-01');
$to = date('2020-08-09');

然后调用查询子句:

Reservation::whereBetween('reservation_from', [$from, $to])->get();

这样就返回SQL查询的 BETWEEN ... AND .... 语句了。

当然了,上面的方法是在SQL中直接进行筛选,如果查询结果限制的条目本身比较少,也能充分利用索引,所以不担心查询的速度,那么我们可以在查询完成后,在返回的 Eloquent Collection 集合上,链式调用过滤 filter 方法进行筛选。

那么代码实现起来像下面这样:

注意程序写起来很柔顺,使用 Carbon 提供的 between 方法进行判断。程序上下文很好理解。

如果考虑初始查询条件圈定的记录条目过多,会对MySQL造成流量的压力,那么在SQL阶段直接筛选出最精准的记录,无疑是个好习惯。whereBetween 在模型里链式调用毫无压力:

如果你觉得框架自带的where子句不足以满足你的查询需求,那么直接用原生查询条件好了,用 whereRaw 就可以了,像下面的例子,先构造查询区间:

$fromDate = "2020-02-01";
$toDate   = "2016-06-30";

然后使用参数绑定:

$reservations = Reservation::whereRaw("(reservation_from >= ? AND reservation_from <= ?)", [$fromDate." 00:00:00", $toDate." 23:59:59"])->get();

别的办法

假如上面的写法你觉得不够直观,或者很难把握,那就跟着直觉走。判断日期之间,无非就是大于某个日期,且小于某个日期这样。那直接用大小比较就行了。

其实between这个关键字,在MySQL中也不过是大小比较的缩写语法糖。那么就可以把程序写成下面这样:

$reservations = Reservation::where('reservation_from', '>=', $from)
                           ->where('reservation_from', '<=', $to)
                           ->get();

写在最后

本文通过3种写法实现了对于日期之间的SQL查询,我们建议使用SQL语句的限制,将筛选的结果精准返回,然后做进一步操作。laravel虽然提供了集合操作,但是在数据库侧效率并不高,所以不提倡全量查询,集合筛选这样的操作。

Happy coding :-)


我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

相关推荐

cpu性能天梯图排行(cpu性能天梯图zol)

电脑处理器排行:Intel型号:酷睿i79700F、酷睿i79700KF、酷睿i99900K;AMD型号:锐龙R73700X、锐龙R73800X、锐龙R93900X。手机处理器排行:A13Bionic...

解压软件安卓(winrar解压软件安卓)
  • 解压软件安卓(winrar解压软件安卓)
  • 解压软件安卓(winrar解压软件安卓)
  • 解压软件安卓(winrar解压软件安卓)
  • 解压软件安卓(winrar解压软件安卓)
mp4不是有效的win32应用程序

fat32是不可以转换成mp4格式的。因为MP4是视频文件得一种格式,或者说是一种流媒体格式的文件,而FAT32是分区格式的一种,采用32位的文件分配表。两者根本不是一码事,风马牛不相及,所以谈不上转...

windows蓝牙驱动(windows蓝牙驱动下载)

windows10蓝牙更新的方法步骤:1.电脑桌面,右键【此电脑】,点击【属性】。2.然后点击【设备管理器】。3.然后展开【蓝牙】。4.然后鼠标右键【Bluetooth】,点击【更新驱动程序(P)】。...

pe制作工具哪个好(最好用的pe制作工具)

1.深山红叶pe工具箱   深山红叶pe系统工具箱是一款高度集成的袖珍光盘工具系统,其带有独立的pe系统,支持USB2.0/SCSI/Netcar...

电脑可以一键还原吗(电脑可以一键还原吗win10)

把电脑一键还原取消的具体方法:1、首先打开计算机,在计算机内打开运行界面,在运行界面内输入sysdm.cpl。2、在“高级”选项卡下,点击“启动和故障恢复”中的“设置”。3、在系统启动一栏中点击下拉框...

vmware workstation安装教程

首先,需要将workstation17的安装程序下载到电脑上。然后,双击安装程序,按照提示进行安装。在安装过程中需要选择安装路径、设置管理员账户等相关信息。安装完成后,可以根据需要对软件进行配置和设置...

hosts文件配置异常不能上网(hosts文件配置出现问题)

是的。Hosts文件配置异常,那么访问的路径会指向错误的地方。那就无法访问网络了。Hosts作为DNS缓存器,他会暂时记住您访问的地址的解析。下次电脑访问此DNS会按以前的访问路径去访问。这时我们可以...

电脑蓝屏怎么解决问题(电脑蓝屏一般怎么解决)

主要症状:;1、电脑使用过程中出现蓝屏;可能原因:;1、电脑中毒2、软件或驱动冲突3、硬件问题;解决方案:;1、检测蓝屏文件2、分析蓝屏文件3、蓝屏修复;方案一:电脑超频过度引起电脑蓝屏;可以...

安装程序正在更新注册表设置

如果你遇到给比较新的电脑装win7系统出现卡死在更新注册表设置界面的话,应该是你出现了下面的行为:1、你的U盘是做成了支持UEFI启动的U盘,而你进winpe是从uefi启动U盘进去的,在uefi的p...

手机分辨率对应dpi(手机分辨率参数)

一般手机默认的DPI是411,当然有厂商也会把默认的设置为360.具体的还是要看个人的喜好的。有人喜欢字体图标比较大的,但也有人喜欢比较小的。dpi是打印尺寸,dpi跟像素是没有必然关系的。200d...

下载了iso文件怎么装系统(iso文件直接安装)

将ISO系统镜像文件进行解压。将解压多的文件,保存到电脑的硬盘中。解压文件完成以后,找到保存文件的文件夹并点击打开,双击硬盘安装。双击硬盘安装后,自动弹出安装设置界面。在安装设置界面中,对系统的盘符和...

华为刷机包官方下载(华为 刷机包)

刷机步骤(线刷):①在电脑下载一个线刷宝②在关机状态下长按电源键跟音量减键5秒会自动进入一个有安卓机器人的界面③用数据线连接手机④线刷宝会识别出手机型号并且给出相应的刷机包点下载就可以⑤下载完成之后点...

手机qq申请账号免费注册(手机上qq申请账号免费注册)
  • 手机qq申请账号免费注册(手机上qq申请账号免费注册)
  • 手机qq申请账号免费注册(手机上qq申请账号免费注册)
  • 手机qq申请账号免费注册(手机上qq申请账号免费注册)
  • 手机qq申请账号免费注册(手机上qq申请账号免费注册)
windows7service pack1下载(windows7 server pack 1)

带常见的网卡驱动,特殊网卡需要自己安装。64位win7升级Windows7ServicePack1(sp1)升级主要由两种方法,具体如下:方法一、打开控制面板-操作中心-WindowsUp...