💽

Prismaのデータ取得で特定のカラムを除外する

2024/08/25に公開

はじめに

データベースからのデータ取得時に、パスワードなどの機密情報を自動的に除外したいケースは多々あります。Prismaでは「omit」機能を使うことで、このようなデータの除外を簡単に実装ができます。

https://www.prisma.io/docs/orm/prisma-client/queries/excluding-fields

注意点

今回紹介する機能はPrisma 5.16.0以降で利用可能です。
それより前のバージョンでは利用できないので、使用には最新バージョンにアップデートする必要があります。

セットアップ方法

  1. schema.prismaファイルに以下の設定を追加します
generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["omitApi"]
}
  1. 設定変更後、以下のコマンドを実行してPrismaクライアントを再生成します
$ npx prisma generate

グローバルでのフィールド除外

PrismaClientのインスタンス作成時に、常に除外したいフィールドを指定できます。

const prisma = new PrismaClient({
  omit: {
    user: {
      password: true
    }
  }
})

この設定により、userモデルのpasswordフィールドが常にクエリ結果から除外されます。

クエリ単位でのフィールド除外

特定のクエリでのみフィールドを除外したい場合は、以下のように指定できます

const prisma = new PrismaClient()

const user = await prisma.user.findUnique({
  omit: {
    password: true
  },
  where: { 
    id: 1 
  } 
})

この方法では、指定したクエリでのみpasswordフィールドが除外されます。

除外設定の上書き

グローバルで除外設定をしたフィールドも、必要に応じて個別のクエリで取得できます。

const user = await prisma.user.findUnique({
  omit: {
    password: false // passwordフィールドが取得されます
  },
  where: {
    id: 1
  }
})

まとめ

今までは特定のカラムを除外するには、exclude関数を実装して利用するなど、少し煩雑な制御が必要でした。Prismaの「omit」機能を活用することで、データを除外する実装がとても容易になります。

Discussion