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...
- 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秒会自动进入一个有安卓机器人的界面③用数据线连接手机④线刷宝会识别出手机型号并且给出相应的刷机包点下载就可以⑤下载完成之后点...
- windows7service pack1下载(windows7 server pack 1)
-
带常见的网卡驱动,特殊网卡需要自己安装。64位win7升级Windows7ServicePack1(sp1)升级主要由两种方法,具体如下:方法一、打开控制面板-操作中心-WindowsUp...
- 一周热门
-
-
飞牛OS入门安装遇到问题,如何解决?
-
如何在 iPhone 和 Android 上恢复已删除的抖音消息
-
Boost高性能并发无锁队列指南:boost::lockfree::queue
-
大模型手册: 保姆级用CherryStudio知识库
-
用什么工具在Win中查看8G大的log文件?
-
如何在 Windows 10 或 11 上通过命令行安装 Node.js 和 NPM
-
威联通NAS安装阿里云盘WebDAV服务并添加到Infuse
-
Trae IDE 如何与 GitHub 无缝对接?
-
idea插件之maven search(工欲善其事,必先利其器)
-
如何修改图片拍摄日期?快速修改图片拍摄日期的6种方法
-
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
