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

如何让Laravel的Booking Model获取唯一可重复的上一条预订ID

解决Laravel Booking Model获取上一条预订ID的重复问题

问题根源在于仅用start_datetime排序时,相同时间的记录缺乏明确的顺序规则,导致重复返回同一ID。要实现唯一、可重复的排序逻辑,需要结合**唯一标识字段(如id)**补充排序条件,确保每个预订记录的位置是确定的。

修改后的previousBookingID方法如下:

public function previousBookingID()
{
    $previousBooking = Booking::where('room_id', $this->room_id)
        ->where(function ($query) {
            $query->where('start_datetime', '<', $this->start_datetime)
                  ->orWhere(function ($query) {
                      $query->where('start_datetime', '=', $this->start_datetime)
                            ->where('id', '<', $this->id);
                  });
        })
        ->orderBy('start_datetime', 'desc')
        ->orderBy('id', 'desc')
        ->select('id')
        ->first();

    return $previousBooking ? $previousBooking->id : null;
}

关键改动说明:

  • 精准筛选条件:将原有的start_datetime <=拆分为两个逻辑分支,确保同时间的记录也能被正确区分:
    1. 匹配开始时间早于当前预订的记录;
    2. 匹配开始时间等于当前预订,但id更小的记录(利用id自增唯一的特性,区分同时间的不同预订)。
  • 稳定排序规则:先按start_datetime降序,再按id降序,让同时间的记录也能按唯一标识确定顺序,保证每次查询结果的一致性。

调整后,无论是否存在相同start_datetime的预订,每个记录都能找到唯一对应的上一条预订ID,不会出现循环返回的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:19:58