[英]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 类型不会在基本“类型”中包含关系字段。 如果您想获取包含相关Posts
的User
类型,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.