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

Laravel中如何用where结合自定义函数比较今日与创建日20工作日后日期

Laravel where查询中使用自定义日期函数的问题

不能直接像你示例里那样在where方法中调用自定义PHP函数afterTwentyBusinessDays($created_at),原因很简单:where方法会把条件转换成SQL语句在数据库端执行,而数据库无法识别你定义的PHP函数。

给你两种可行的解决方案:

方案一:将函数逻辑转为SQL表达式,使用whereRaw

把afterTwentyBusinessDays的日期计算逻辑转换成数据库能识别的SQL语句,通过whereRaw执行原生查询。

比如如果你的函数只是排除周末计算20个工作日,对应的SQL逻辑可以这样写:

->whereRaw('DATE_ADD(created_at, INTERVAL (20 + FLOOR((20 - 1)/5)*2) DAY) >= CURDATE()')

如果需要排除节假日,你需要先在数据库中创建节假日表,然后通过关联查询或子查询来调整日期计算逻辑,确保SQL能准确算出20个工作日后的日期。

方案二:应用层过滤(数据量小时适用)

如果数据量不大,可以先查询出所有记录,再用Laravel集合的filter方法在应用层过滤:

$targetRecords = YourModel::get()->filter(function ($model) {
    return afterTwentyBusinessDays($model->created_at) >= today();
});

这种方法不用修改SQL,但数据量大时会占用较多内存,性能较差,只适合小数据集场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:45:33