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

Laravel查询指定供应商所有产品并关联指定时段StockForecast问题求助

解决方案

你的问题核心在于whereHas的作用是筛选出存在符合条件关联记录的主模型,这会直接排除掉没有销售预测的产品。要实现“返回指定供应商所有产品,同时仅加载指定时段内的预测(无预测则保留产品)”的需求,你需要用with()来预加载关联并添加条件,而不是用whereHas做过滤。

修改后的查询代码如下:

$products = Product::where('supplier_id', $supplier)
    ->with(['stock_forecasts_fk' => function ($query) use ($begin, $end) {
        // 仅加载指定时间段内的销售预测
        $query->whereDate('date', '>', $begin)
              ->whereDate('date', '<', $end);
    }])
    ->get();

为什么这样能解决问题?

  • with()是预加载关联数据,它不会对主模型(Product)的结果集做过滤,只会对关联的StockForecast数据进行筛选。
  • 对于没有符合条件预测的产品,它的stock_forecasts_fk属性会返回一个空的Collection,但产品本身依然会被保留在结果里。
  • 如果你需要包含日期边界(比如允许date等于$begin或$end),可以把条件改成>=和<=:
    $query->whereDate('date', '>=', $begin)
          ->whereDate('date', '<=', $end);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:12:40