Prismaで、リレーション先のデータに対する`WHERE`クエリを作る
「<カテゴリー名>のカテゴリを含む投稿記事」のように、リレーション先のデータがWHERE句に入るSELECTを実行したい場合、whereをネストさせます。 1対1のリレーションでクエリを作る場合 1対1の場合は、シンプル […]
広告ここから
広告ここまで
目次
「<カテゴリー名>のカテゴリを含む投稿記事」のように、リレーション先のデータがWHERE
句に入るSELECT
を実行したい場合、where
をネストさせます。
1対1のリレーションでクエリを作る場合
1対1の場合は、シンプルにネストさせます。
const posts = await prisma.post.findMany({
where: {
author: {
id: {
equals: 10
}
}
},
select: {
title: true,
author: {
select: {
id: true,
name: true
}
}
}
})
多対多など、複数アイテムがある場合のクエリを作る場合
複数アイテムがある場合、直感的には配列を使いたくなりますが、Prismaのクエリではすこし異なる書き方です。
const posts = await prisma.post.findMany({
where: {
categories: {
some: {
category: {
name: {
contains: 'Do'
}
}
}
}
},
select: {
title: true,
categories: {
select: {
category: {
select: {
name: true
}
}
}
}
}
})
none
, some
, every
の3種類で複数アイテムがある場合のクエリを定義します。
自分の理解では、以下の使い分けになると考えています。
none
: 以下の条件に該当しないアイテム (NOT)some
: 以下の条件のどれかに該当するアイテム (OR)every
: 以下の条件のすべてに該当するアイテム(AND)
組み合わせたクエリを作りたい場合の実装は、もうちょっと調べてからまとめます。