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

Lumen中Eloquent查询俱乐部指定时段在场用户的问题

问题解决:获取时段内在场用户的正确Eloquent查询

当前查询的逻辑仅检查了预订的入场时间在目标时段内,或者离场时间在目标时段内,但忽略了预订完全覆盖目标时段的情况(比如10:00-13:00覆盖11:32-12:32)。这种情况下,入场时间早于目标时段开始,离场时间晚于目标时段结束,既不满足entry_time在目标区间,也不满足exit_time在目标区间,导致该记录被错误排除。

正确的时间重叠判断逻辑应为:预订的入场时间 ≤ 目标时段的结束时间,且预订的离场时间 ≥ 目标时段的开始时间。只要满足这两个条件,两个时段就存在重叠,用户属于在场状态。

修正后的查询代码如下:

$activity = Activity::findOrFail($activity_id);

$users = User::whereHas('activities', function ($q) use ($activity) {
    $q->where('activities.activity_id', $activity->activity_id);
})->whereHas('bookingActivities', function ($query) use ($booking) {
    $query->whereNull('cancelled_by')
          ->where(function ($q) use ($booking) {
              // 判断预订时段与目标时段是否重叠
              $q->where('bookingActivities.entry_time', '<=', $booking->exit_time)
                ->where('bookingActivities.exit_time', '>=', $booking->entry_time);
          });
})->paginate();

注:原代码中存在笔误$booking->_entry_time,已修正为正确的$booking->entry_time。

内容的提问来源于stack exchange,提问作者joshi yogesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:01:15