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

Laravel中如何将指定SQL转为查询构建器?日期范围查询求助

Laravel中实现日期区间匹配查询的正确写法

我来帮你修正这个Laravel查询的写法~你之前的问题出在对whereBetween方法的理解上——Laravel的whereBetween是用来检查某个字段的值是否在给定的两个值之间,但你需要的是反过来:当前日期是否落在startPeriod和endPeriod这两个字段的区间内,所以直接用whereBetween是行不通的,下面给你两种靠谱的实现方式:

方法一:使用whereRaw直接映射原生SQL

这种方式最贴近你原本的SQL逻辑,同时通过参数绑定避免SQL注入风险:

$now = Carbon::now()->toDateTimeString(); 
$prod = DB::table('period')
    ->where('priceId', 1788749)
    ->whereRaw("? BETWEEN startPeriod AND endPeriod", [$now])
    ->get();

这里的?会被后面数组里的$now安全替换,完全对应你写的原生SQL逻辑。

方法二:拆分两个where条件

把区间判断拆成两个独立的条件,可读性更强,而且Laravel可以直接接收Carbon对象,不用手动转成字符串:

$now = Carbon::now(); 
$prod = DB::table('period')
    ->where('priceId', 1788749)
    ->where('startPeriod', '<=', $now)
    ->where('endPeriod', '>=', $now)
    ->get();

为什么你的原写法不对?

你之前的wherebetween($now, ['startPeriod', 'endPeriod'])会生成这样的错误SQL:

where '2024-xx-xx xx:xx:xx' between 'startPeriod' and 'endPeriod'

这里Laravel把startPeriod和endPeriod当成了字符串值,而不是字段名,自然查不出正确结果啦。

内容的提问来源于stack exchange,提问作者story ks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:49:09