跳到主要內容

排除欄位

預設情況下,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,您可以使用以下方式排除 password 和 email

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 被覆蓋

© . This site is unofficial and not affiliated with Prisma Data, Inc.