You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel中编写含BETWEEN运算符的日期范围查询?

如何将指定SQL转换为Laravel查询构建器写法?

没问题,我来帮你把这条SQL转换成Laravel里的写法,其实有几种不同的实现方式,看你习惯哪种:

原SQL功能回顾

首先先明确一下你这条SQL的作用:查询mytable表中created_date字段在**最近90天内(包含今天)**的所有记录。


方式一:使用Laravel查询构建器 + Carbon(推荐)

Laravel默认集成了Carbon日期处理库,用它来处理日期范围会更灵活,还能轻松处理时区问题:

use Illuminate\Support\Facades\DB;
use Carbon\Carbon;

// 查询最近90天的记录(包含当天的所有时间)
$records = DB::table('mytable')
    ->whereBetween('created_date', [
        Carbon::now()->subDays(90)->startOfDay(), // 90天前的00:00:00
        Carbon::now()->endOfDay() // 今天的23:59:59
    ])
    ->get();

这里用subDays(90)替代了原生SQL里的CURDATE() - INTERVAL 90 DAY,startOfDay()和endOfDay()是为了确保覆盖当天的所有时间范围,避免因为created_date是datetime类型而漏掉部分记录。


方式二:直接使用数据库原生函数(贴近原SQL写法)

如果你更想贴近原生SQL的逻辑,也可以用DB::raw()直接调用数据库的CURDATE()函数:

use Illuminate\Support\Facades\DB;

$records = DB::table('mytable')
    ->whereBetween('created_date', [
        DB::raw('CURDATE() - INTERVAL 90 DAY'),
        DB::raw('CURDATE()')
    ])
    ->get();

这种写法和你原有的SQL几乎完全一致,适合习惯原生SQL语法的场景。


方式三:使用Eloquent模型(如果有对应模型的话)

如果你已经为mytable创建了Eloquent模型(比如App\Models\Mytable),写法会更简洁:

use App\Models\Mytable;
use Carbon\Carbon;

$records = Mytable::whereBetween('created_date', [
    Carbon::now()->subDays(90)->startOfDay(),
    Carbon::now()->endOfDay()
])->get();

同样,你也可以把Carbon换成DB::raw()的写法,逻辑和上面一致。


内容的提问来源于stack exchange,提问作者Kanu Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:54:52