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

フィールドを除外する

デフォルトでは、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オプションに複数のキーと値のペアを追加します。以前と同じスキーマを使用すると、以下のようにパスワードとメールを除外できます

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 は、特定の select が使用されるか、omit が上書きされない限り、同じPrisma Clientインスタンスで行われるすべてのクエリに適用されます。

© . All rights reserved.