繁体   English   中英

如何让 Prisma 客户端生成关系类型

[英]How to get Prisma client to generate relationship types

我正在尝试在用户和帖子之间创建一对多的关系。 我可以创建数据库模式并且可以编写/查询一切正常,但似乎正在生成的 prisma 客户端没有类型上的关系。

例如,我的架构如下所示:

model User {
  id    Int    @id @default(autoincrement())
  posts Post[]
}

model Post {
  id       Int  @id @default(autoincrement())
  author   User @relation(fields: [authorId], references: [id])
  authorId Int
}

然后我运行npx prisma generate来创建具有以下类型的客户端

/**
 * Model User
 * 
 */
export type User = {
  id: number
}

/**
 * Model Post
 * 
 */
export type Post = {
  id: number
  authorId: number
}

我希望用户类型看起来像这样:

export type User = {
  id: number;
  posts: Post[];
}

我是否正确定义了我的 Prisma 架构? 我需要做什么才能使类型包含关系?

默认情况下,Prisma 类型不会在基本“类型”中包含关系字段。 如果您想获取包含相关PostsUser类型,Prisma 客户端将根据您的查询结构包含该类型。

https://www.prisma.io/docs/concepts/components/prisma-client/select-fields

您可以在任何 Prisma CRUD 操作上使用include属性让 Prisma 客户端返回特定的关系字段,并且这些相关字段包含在发出的类型中。 Prisma 将为您处理这种打字!

const usersWithPosts = await prisma.user.findMany({
  include: {
    posts: true
  }
});

// usersWithPosts has a type like this:
// Array<User & { posts: Array<Post> }>

========

编辑:如果您想提前计算类型而不想编写查询,您可以使用Prisma.UserGetPayload (或其他形式的GetPayload ,因为前缀将根据 model 更改。)

type UserWithPosts = Prisma.UserGetPayload<{
  include: {
    posts: true;
  };
}>;

这会发出以下类型:

type UserWithPosts = User & {
    posts: Post[];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM