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側で指定しましょう。