Prismaでリレーション先のデータもSELECTしたい場合のパラメータ覚書
「投稿データを取得した際に、著者データもSELECTしたい」のような、リレーション先のデータもSELECTしたい場合の操作メモです。 Prismaでリレーション先のデータを取るシンプルな方法 クイックスタートなどで紹介さ […]
広告ここから
広告ここまで
目次
「投稿データを取得した際に、著者データもSELECT
したい」のような、リレーション先のデータもSELECTしたい場合の操作メモです。
Prisma
でリレーション先のデータを取るシンプルな方法
クイックスタートなどで紹介されている方法は、include
での指定です。
const posts = await prisma.post.findMany({
include: {
categories: {
include: {
category: true
}
},
author: true,
}
})
この場合、author
やcategories
, category
のデータ丸ごと取得します。SELECT * FROM ~
みたいなイメージですね。
取得したいカラムを明示的に指定する場合は、include
ではなくselect
を使う
include
ではなくselect
を使うと、カラムの指定ができるらしいです。
const posts = await prisma.post.findMany({
select: {
title: true,
id: true,
author: {
select: {
name: true
}
}
}
})
実行すると、このようなデータが取れます。
[
{ title: 'voluptatem', id: 5, author: { name: 'Norbert' } },
{
title: 'Quia dignissimos deleniti numquam consequuntur. Labore eaque dolorem in animi et reiciendis. Nisi rerum delectus voluptates et repellendus.\n' +
'Quae dolorem tempora. Consequatur eligendi fugiat cum in. Amet inventore eaque voluptate. Excepturi aliquid harum expedita alias quas dolorem qui ratione officia. Sit sed ab explicabo ab nihil. Quod neque qui.\n' +
'Quia error qui quo vel eius. Velit vel laudantium. Ut architecto quia. Ut dolorum similique et. Delectus aspernatur nisi ut eaque architecto harum sunt voluptatibus laudantium. Molestias nemo voluptatum consequatur praesentium est non labore enim dolorum.',
id: 6,
author: { name: 'Roger' }
},
{ title: 'debitis', id: 7, author: { name: 'Javonte' } }
]
余談: include
とselect
は併用できない
あるのかわからないユースケースですが、「リレーション先は丸ごとデータ取りたいけど、元テーブルのはSELECT
したい」みたいな場合はselect
とinclude
を併用したくなります。
が、両方を引数に渡すとエラーが出ます。
"Please either choose select
or include
."
select
を使いたい場合は、全データselect
側で指定しましょう。