フィールドの除外
デフォルトでは、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 } })
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
firstName String
lastName String
email String @unique
password String
}
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
}
})
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
firstName String
lastName String
email String @unique
password String
}
複数のフィールドをomitする方法
複数のフィールドの省略は、複数のフィールドを選択するのと同じように機能します。omitオプションに複数のキーと値のペアを追加します。以前と同じスキーマを使用すると、次の方法で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
に設定します。
- 明示的な選択
- Omit False
const user = await prisma.user.findUnique({
select: {
firstName: true,
lastName: true,
password: true // The password field is now selected.
},
where: {
id: 1
}
})
const user = await prisma.user.findUnique({
omit: {
password: false // The password field is now selected.
},
where: {
id: 1
}
})
omit
をグローバルまたはローカルで使用する場合
フィールドをグローバルまたはローカルで省略する場合を理解することが重要です。
- クエリに誤って含まれるのを防ぐためにフィールドを省略する場合は、グローバルに省略するのが最適です。例:機密情報が誤って公開されないように、
User
モデルからpassword
フィールドをグローバルに省略します。 - クエリでフィールドが不要なために省略する場合は、ローカルに省略するのが最適です。
ローカルなomit(クエリでomit
オプションが提供されている場合)は、それが定義されているクエリにのみ適用されますが、グローバルなomitは、同じPrisma Clientインスタンスで行われたすべてのクエリに適用されます。特定のselectが使用されるか、omitがオーバーライドされない限り。