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

在Laravel中如何查询指定日期范围内未产生销售记录的商品?

函数实现逻辑

你可以用 Laravel 提供的whereDoesntHave关联查询方法实现,这个方法可以直接筛选出不存在指定关联条件的模型记录,刚好匹配你需要的「查询指定日期范围内无销售记录的商品」需求,完整代码如下:

private function getDidntSellBetweenDates($days, $user, $filter_by)
{
    $date_from = Carbon::now()->subDays($days);
    $date_to = Carbon::now();

    return Inventory::where('inventory.client_id', $user->client_id)
        // 筛选「在指定日期范围内没有对应销售记录」的商品
        ->whereDoesntHave('sellRecord', function ($query) use ($date_from, $date_to) {
            $query->whereBetween('created_at', [$date_from, $date_to]);
        })
        // 保留你原有的计数逻辑,无销售时这个字段值会是0
        ->withCount(["sellRecord as $filter_by" => function($query) use ($date_from, $date_to) {
            $query->select(DB::raw("created_at"))->take(1);
        }])
        ->paginate(100);
}
逻辑说明
  • 首先和原函数一样先计算查询的起止时间范围
  • whereDoesntHave会自动过滤掉所有在指定时间范围内存在sellRecord关联的Inventory记录,剩下的就是完全没有产生销售的商品
  • 保留了你原有的withCount逻辑,方便你统一处理返回字段,无销售时该统计字段值固定为0
  • 分页逻辑和原函数保持一致,不需要额外调整

注意:请确认你的Inventory模型已经正确定义了和sellRecord的一对多关联,这个是whereDoesntHave方法正常工作的前提。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:27:01