我正在try 在用户和帖子之间创建一对多关系.我可以创建数据库模式,也可以写/查询所有内容,但似乎正在生成的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类型不会在基本"type"中包括关系字段.如果您想要获取包含相关PostsUser的类型,PRISMA客户端将根据您的查询 struct 将其包括在内.

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

您可以在任何Prisma CRUD操作上使用include属性,让Prisma客户端返回特定的关系字段,这些相关字段包含在发出的类型中.普里斯玛会帮你打字的!

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

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

=

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

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

这会发出以下类型:

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

Javascript相关问答推荐

reaction useEffect KeyDown for each 条目配音输出

如何按预期聚合SON数据?

被CSS优先级所迷惑

useNavigation更改URL,但不呈现或显示组件

为什么这个JS模块在TypeScript中使用默认属性导入?""

Next.js(react)使用moment或不使用日期和时间格式

如何粗体匹配的字母时输入搜索框使用javascript?

在forEach循环中获取目标而不是父对象的属性

将基元传递给THEN处理程序

FireBase云函数-函数外部的ENV变量

FileReader()不能处理Firefox和GiB文件

如何根据查询结果重新排列日期

在SuperBase JS客户端中寻址JSON数据

本地损坏的Java脚本

通过解构/功能组件接收props-prop验证中缺少错误"

rxjs在每次迭代后更新数组的可观察值

输入数据覆盖JSON文件

我如何才能让p5.js在不使用实例模式的情况下工作?

在HTML中使用meta标记来指定定制元数据以用于使用JavaScript进行检索是不是一个坏主意?

如何将值从后端传递到前端