フィールドを除外する
デフォルトでは、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オプションに複数のキーと値のペアを追加します。以前と同じスキーマを使用すると、以下のようにパスワードとメールを除外できます
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
は、特定の select
が使用されるか、omit
が上書きされない限り、同じPrisma Clientインスタンスで行われるすべてのクエリに適用されます。