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

Laravel查询异常:需筛选未来6个月内数据却返回6个月后数据

问题排查与修正:筛选未来6个月内过期的药品

问题原因

你的查询逻辑完全与需求相悖:

  • 需求是筛选未来6个月内过期的药品(即过期日期在当前时间到当前时间+6个月之间)
  • 但当前代码使用where('exp_date','>', Carbon::now()->addMonths(6)),实际是在筛选过期时间在6个月之后的药品,这直接导致返回结果不符合预期。
  • 另外注意Carbon方法的规范命名:addmonths应改为addMonths(PHP对方法名大小写不敏感,但遵循驼峰规范能避免潜在问题)

修正方案

根据业务需求,有两种常见的修正方式:

1. 仅筛选「未过期但将在未来6个月内过期」的药品

限定过期日期在当前时间到6个月后之间:

$medicines = Medicine::orderBy('exp_date', 'desc')
    ->where('exp_date', '<=', Carbon::now()->addMonths(6))
    ->where('exp_date', '>=', Carbon::now())
    ->paginate(15);

2. 筛选「已过期+未来6个月内过期」的药品(若业务需要统计这类范围)

只保留过期日期不晚于6个月后的条件:

$medicines = Medicine::orderBy('exp_date', 'desc')
    ->where('exp_date', '<=', Carbon::now()->addMonths(6))
    ->paginate(15);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:06:29