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

如何在Prisma中统计用户关联订单的支付记录总数?

解决方案

要实现查询用户时同时统计其关联的licenses、orders以及所有订单对应的payments总数,你可以通过以下两种方式修改Prisma查询:

方法一:查询后计算(简单直观)

先查询用户基础信息、licenses和orders的统计数,同时获取每个订单的支付记录数量,再通过代码求和得到总支付数:

const user = await prisma.users.findFirst({
  where: {
    id: +userid,
  },
  include: {
    _count: {
      select: {
        licenses: true,
        orders: true,
      },
    },
    // 仅获取每个订单的支付记录数量,不返回冗余字段
    orders: {
      select: {
        _count: {
          select: {
            payments: true,
          },
        },
      },
    },
  },
});

// 计算所有订单的支付记录总数
const totalPayments = user.orders.reduce((total, order) => total + order._count.payments, 0);
// 将总数合并到_count对象中
user._count.payments = totalPayments;
// 可选:删除orders字段,避免返回多余数据
delete user.orders;

方法二:数据库层面子查询统计(减少代码处理)

通过Prisma的关联子查询直接在数据库中统计支付记录总数,无需后续代码求和:

const user = await prisma.users.findFirst({
  where: {
    id: +userid,
  },
  select: {
    // 保留需要的用户基础字段,根据实际需求调整
    id: true,
    name: true,
    // 原有的统计字段
    _count: {
      select: {
        licenses: true,
        orders: true,
      },
    },
    // 子查询统计该用户所有订单的支付记录总数
    paymentsCount: {
      _aggregate: {
        count: true,
      },
      where: {
        order: {
          userId: +userid,
        },
      },
    },
  },
});

// 将子查询结果合并到_count中
user._count.payments = user.paymentsCount._aggregate.count;
delete user.paymentsCount;

注意事项

确保你的Prisma Schema已正确定义关联关系:

model User {
  id        Int      @id @default(autoincrement())
  licenses  License[]
  orders    Order[]
  // 其他用户字段
}

model Order {
  id        Int      @id @default(autoincrement())
  userId    Int
  user      User     @relation(fields: [userId], references: [id])
  payments  Payment[]
  // 其他订单字段
}

model Payment {
  id        Int      @id @default(autoincrement())
  orderId   Int
  order     Order    @relation(fields: [orderId], references: [id])
  // 其他支付字段
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:13:27