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
相关产品推荐
相关产品推荐

