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

Prisma中按订单流程类型统计订单并关联流程名称的问题

Prisma按订单流程类型统计订单并关联流程名称的解决方案

你的核心问题是groupBy查询无法直接关联OrderProcessType表的processName字段,因为Prisma的groupBy仅支持分组字段和聚合函数,不能直接包含关联表的非分组字段。以下是两种可行的解决方法:

方法一:从OrderProcessType模型反向查询并统计

利用模型间的关联关系,从OrderProcessType出发查询,同时统计关联的订单数量,再调整结果结构匹配期望格式:

// 查询流程类型及对应订单数量
const processData = await prisma.orderProcessType.findMany({
  select: {
    orderProcessTypeId: true,
    processName: true,
    _count: {
      select: {
        orders: true // 统计关联的订单数量
      }
    }
  }
});

// 转换为期望的结果结构
const result = processData.map(item => ({
  _count: { _all: item._count.orders },
  orderProcessTypeId: item.orderProcessTypeId,
  processName: item.processName
}));

这种方法完全基于Prisma ORM,类型安全,无需写原生SQL,适合大多数常规场景。

方法二:使用原生SQL直接关联查询

如果需要更灵活的查询逻辑,可以用Prisma的$queryRaw执行原生SQL,直接关联两张表并分组统计:

// 执行原生SQL查询
const rawData = await prisma.$queryRaw`
  SELECT 
    opt.orderProcessTypeId,
    opt.processName,
    COUNT(o.orderId) as order_count
  FROM OrderProcessType opt
  LEFT JOIN \`Order\` o ON opt.orderProcessTypeId = o.orderProcessTypeId
  GROUP BY opt.orderProcessTypeId, opt.processName
`;

// 转换为期望的结果结构
const result = rawData.map(item => ({
  _count: { _all: item.order_count },
  orderProcessTypeId: item.orderProcessTypeId,
  processName: item.processName
}));

注意:SQL中Order需要用反引号包裹,因为它是SQL关键字。

两种方法最终都能输出你期望的包含_count、orderProcessTypeId和processName的结果结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:33:24