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

如何在Laravel中获取近18个月未下单用户的记录?

解决近18个月无购买记录用户的查询问题

你的代码逻辑完全搞反了——当前代码是在筛选近18个月有过订单的用户,和你要的“近18个月没购买”需求正好相反。

正确实现方式

直接使用Eloquent的whereDoesntHas方法,筛选不存在近18个月订单的用户:

$eighteenMonthsAgo = Carbon::now()->subMonths(18);
$modelQuery = $modelQuery->whereDoesntHave('hasOrders', function ($query) use ($eighteenMonthsAgo) {
    $query->whereDate('order_date', '>=', $eighteenMonthsAgo);
});

另一种等价写法

也可以通过whereHas关联统计数为0的方式实现,效果和上面一致:

$eighteenMonthsAgo = Carbon::now()->subMonths(18);
$modelQuery = $modelQuery->whereHas('hasOrders', function ($query) use ($eighteenMonthsAgo) {
    $query->whereDate('order_date', '>=', $eighteenMonthsAgo);
}, '<=', 0);

逻辑说明

  • whereDoesntHas是Eloquent专门用于筛选“不存在指定关联条件”的模型,这里就是找没有近18个月内订单的用户。
  • 原代码用whereHas会筛选出存在近18个月订单的用户,完全不符合需求,所以需要把关联存在的判断改成不存在。

内容的提问来源于stack exchange,提问作者VINA NIKAM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:02:08