如何让Prisma Client生成包含关联关系的类型?
问题解答
你的Prisma Schema定义是正确的
你写的User和Post一对多关联语法完全符合Prisma规范,数据库能正常读写也说明关联逻辑没问题。
为什么生成的基础类型里没有关联字段
你看到的User、Post是Prisma Client生成的基础模型类型,这类类型只对应数据库表的直接存储字段,不会默认包含关联字段——因为关联数据需要你查询时显式指定加载,不是默认返回的内容。
如何获取包含关联关系的类型
有三种实用方式:
查询时自动推导类型:当你用
include指定加载关联数据,TypeScript会自动推导带关联字段的返回类型// 查询用户并加载其所有帖子 const userWithPosts = await prisma.user.findUnique({ where: { id: 1 }, include: { posts: true } }); // 此时userWithPosts的类型自动包含posts: Post[]导出Prisma预定义的关联类型:Prisma Client会自动生成带关联的复合类型,可直接导出使用
import type { Prisma } from '@prisma/client'; // 定义包含posts关联的User类型 type UserWithPosts = Prisma.UserGetPayload<{ include: { posts: true } }>; // 直接使用这个类型 const user: UserWithPosts = { id: 1, posts: [{ id: 1, authorId: 1 }] };手动扩展基础类型:如果需要复用,也可以手动把关联字段加到基础类型上
import type { User, Post } from '@prisma/client'; type UserWithPosts = User & { posts: Post[]; };
内容的提问来源于stack exchange,提问作者Stretch0
相关产品推荐
相关产品推荐

