跳到主要内容

排除字段

默认情况下,Prisma Client 从模型返回所有字段。您可以使用 select 来缩小结果集,但是如果您有一个大型模型,并且只想排除少量字段,这可能会很笨拙。

信息

从 Prisma ORM 6.2.0 开始,通过您可以传递给 Prisma Client 的 omit 选项支持排除字段。从 5.16.0 到 6.1.0 版本,您必须使用 omitApi 预览功能才能访问此选项。

使用 omit 全局排除字段

以下是全局(即针对给定模型的所有查询)排除字段的类型安全方法

const prisma = new PrismaClient({
omit: {
user: {
password: true
}
}
})

// The password field is excluded in all queries, including this one
const user = await prisma.user.findUnique({ where: { id: 1 } })

使用 omit 局部排除字段

以下是局部(即针对单个查询)排除字段的类型安全方法

const prisma = new PrismaClient()

// The password field is excluded only in this query
const user = await prisma.user.findUnique({
omit: {
password: true
},
where: {
id: 1
}
})

如何省略多个字段

省略多个字段的工作方式与选择多个字段相同:将多个键值对添加到 omit 选项。使用与之前相同的 schema,您可以使用以下方法省略密码和电子邮件

const prisma = new PrismaClient()

// password and email are excluded
const user = await prisma.user.findUnique({
omit: {
email: true,
password: true,
},
where: {
id: 1,
},
})

多个字段可以在本地和全局范围内省略。

如何选择先前省略的字段

如果您全局省略字段,您可以通过专门选择该字段或在查询中将 omit 设置为 false 来“覆盖”。

const user = await prisma.user.findUnique({
select: {
firstName: true,
lastName: true,
password: true // The password field is now selected.
},
where: {
id: 1
}
})

何时全局或局部使用 omit

重要的是要了解何时全局或局部省略字段

  • 如果您省略某个字段是为了防止它意外包含在查询中,则最好全局省略它。例如:全局省略 User 模型中的 password 字段,以防止敏感信息意外泄露。
  • 如果您省略某个字段是因为在查询中不需要它,则最好局部省略它。

局部省略(当查询中提供 omit 选项时)仅适用于定义它的查询,而全局省略适用于使用同一 Prisma Client 实例进行的每个查询,除非使用了特定的 select 或 omit 被覆盖