メインコンテンツにスキップ

フィールドの除外

デフォルトでは、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する方法

複数のフィールドの省略は、複数のフィールドを選択するのと同じように機能します。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,
},
})

複数のフィールドをローカルおよびグローバルに省略できます。

以前に省略されたフィールドを選択する方法

フィールドをグローバルに省略した場合、「オーバーライド」するには、フィールドを明示的に選択するか、クエリでomitfalseに設定します。

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(クエリでomitオプションが提供されている場合)は、それが定義されているクエリにのみ適用されますが、グローバルなomitは、同じPrisma Clientインスタンスで行われたすべてのクエリに適用されます。特定のselectが使用されるか、omitがオーバーライドされない限り