如何在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
相关产品推荐
相关产品推荐

