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

如何用Prisma根据当前时间查询餐厅对应时段的菜单类型

完善后的查询代码

直接给你处理好的Prisma查询逻辑,同时覆盖了allDay全天可用的场景,还支持可选的分钟级精确匹配(比单纯小时判断更准确):

// 先获取当前的小时和分钟,分钟可选但建议加上
const now = new Date();
const timeNow = now.getHours();
const timeNowMinutes = now.getMinutes();

const menuType = await db.menu.findMany({
  where: {
    branchId: branchId,
    // 关联ShowingHours模型的筛选条件
    ShowingHours: {
      OR: [
        // 第一种情况:全天可用的时段
        { allDay: true },
        // 第二种情况:当前时间处于设定的时段区间内
        {
          AND: [
            // 开始时间不晚于当前时间
            {
              OR: [
                { fromHour: { lt: timeNow } },
                { 
                  fromHour: { equals: timeNow }, 
                  fromMinute: { lte: timeNowMinutes } 
                }
              ]
            },
            // 结束时间不早于当前时间
            {
              OR: [
                { toHour: { gt: timeNow } },
                { 
                  toHour: { equals: timeNow }, 
                  toMinute: { gt: timeNowMinutes } 
                }
              ]
            }
          ]
        }
      ]
    }
  },
  // 可选:如果只需要菜单类型,加上select减少返回数据
  select: { type: true }
});

关键逻辑说明

  1. 全天时段兼容:单独处理allDay: true的记录,这类菜单全天都可获取
  2. 精确时间匹配:
    • 当当前小时等于开始小时时,必须满足当前分钟≥开始分钟
    • 当当前小时等于结束小时时,必须满足当前分钟<结束分钟
    • 小时不在首尾时,直接判断小时区间即可
  3. 嵌套关联查询:通过Prisma的嵌套where条件,直接关联Menu对应的ShowingHours模型做筛选,不需要额外的关联查询

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:25:29