💽
Prismaのデータ取得で特定のカラムを除外する
はじめに
データベースからのデータ取得時に、パスワードなどの機密情報を自動的に除外したいケースは多々あります。Prismaでは「omit」機能を使うことで、このようなデータの除外を簡単に実装ができます。
注意点
今回紹介する機能はPrisma 5.16.0以降で利用可能です。
それより前のバージョンでは利用できないので、使用には最新バージョンにアップデートする必要があります。
セットアップ方法
-
schema.prisma
ファイルに以下の設定を追加します
generator client {
provider = "prisma-client-js"
previewFeatures = ["omitApi"]
}
- 設定変更後、以下のコマンドを実行して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