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

如何在Prisma中自动生成包含关联关系的完整类型?

如何在Prisma中自动生成包含关联关系的完整类型?

嘿,我之前也被这个问题卡过!默认情况下Prisma生成的基础模型类型确实只带模型自身的字段,就像你给出的示例里,Order的默认类型只有id和userId,完全没包含user和payments这些关联字段。不过别担心,有几个简单又实用的方法能解决这个问题:

先把你提供的模型示例贴出来,方便大家对照参考:

model Order {
  id          String    @id @default(uuid()) @db.Uuid
  userId      String    @db.Uuid
  user        User?     @relation(fields: [userId], references: [id])
  payments    Payment[]
}

model Payment {
  id        String        @id @default(uuid()) @db.Uuid
  orderId   String        @db.Uuid
  order     Order         @relation(fields: [orderId], references: [id])
}

方法一:用Prisma内置的Prisma.GetPayload类型助手

Prisma本身就自带了专门的类型工具,能帮你提取包含关联的完整类型,用法超直接:

import { Prisma } from '@prisma/client';

// 生成包含user和payments关联的Order类型
type OrderWithRelations = Prisma.GetPayload<{
  model: Prisma.OrderModel,
  include: {
    user: true,
    payments: true
  }
}>;

现在这个OrderWithRelations类型就包含了id、userId,以及关联的user(可选User类型)和payments(Payment数组)字段,完全符合你要的完整结构。


方法二:从实际查询的返回类型推导

如果你代码里已经有固定的关联查询逻辑(比如经常用include拉取关联数据),可以直接提取这个查询的返回类型,不用手动写include配置:

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

// 先定义带关联查询的函数
async function fetchFullOrder(orderId: string) {
  return prisma.order.findUnique({
    where: { id: orderId },
    include: {
      user: true,
      payments: true
    }
  });
}

// 提取函数的返回类型,Awaited用来处理Promise包装的类型
type OrderWithRelations = Awaited<ReturnType<typeof fetchFullOrder>>;

这种方式的好处是,要是你后续修改了查询里的include配置,类型会自动跟着更新,不用手动调整类型定义,省了不少麻烦。


方法三:创建全局可用的自定义类型

如果项目里很多地方都要用到带关联的类型,建议在项目里建一个专门的类型文件(比如src/types/prisma-custom.ts),把常用的带关联类型都集中定义在这里:

import { Prisma } from '@prisma/client';

// 带完整关联的Order类型
export type OrderWithFullRelations = Prisma.GetPayload<{
  model: Prisma.OrderModel,
  include: { user: true, payments: true }
}>;

// 带关联Order的Payment类型
export type PaymentWithOrder = Prisma.GetPayload<{
  model: Prisma.PaymentModel,
  include: { order: true }
}>;

之后在任何需要的地方直接导入这些类型就行,维护起来特别省心。


最后提醒一句:不管用哪种方法,只要你修改了Prisma Schema文件,记得跑一下npx prisma generate重新生成客户端,这样所有的类型都会同步更新哦。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 12:59:30