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

Laravel7 pivot表条件查询赞助房源无结果问题排查

Eloquent 赞助期房源查询无结果修复

错误原因

你当前查询无结果的核心问题是错误使用了whereTime()查询构造器方法:

  • whereTime()的作用是仅提取日期时间字段的「时:分:秒」部分做数值比较,会直接忽略年、月、日信息,完全无法用来判断完整的时间区间是否覆盖当前时间。
  • 这种写法会出现两类错误:一是把已过期、未生效的赞助误判为有效,二是当时间的时分秒部分不满足比较条件时,直接过滤掉所有实际在有效期内的赞助记录,最终返回空结果。

修正后的代码

直接使用普通where方法比较完整的日期时间值即可:

$houses = House::with(['position', 'user', 'messages', 'services', 'visualizations', 'sponsorships'])
    ->whereHas('sponsorships', function($query) {
        $currentTime = Carbon::now();
        $query->where('sponsor_start', '<=', $currentTime)
              ->where('sponsor_end', '>', $currentTime);
    })
    ->where('is_visible', 1)
    ->paginate(12);

额外排查点

如果修正后仍有问题,可以按以下顺序核对:

  • 确认House模型中sponsorships关联定义正确,若使用了自定义中间表、非默认外键,需要在关联方法中明确声明参数
  • 确认sponsor_start、sponsor_end字段为datetime或timestamp类型,不要存储为非标准格式的字符串时间,否则会触发字符串比较逻辑导致结果错误
  • 可通过查询构造器的toSql()、getBindings()方法打印最终执行的SQL和绑定参数,确认时间取值、字段名匹配正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:42:30