supabase์ prisma(3) - prisma ์ฌํ
๐์์ํ๋ฉฐ
๊ธฐ๋ณธ CRUD์์ ๋ ๋ค์ํ ํ์ฉ๋ฒ์ ํจ๊ป ์ ๋ฆฌํ๊ณ ์ ํ๋ค.
์ด ๊ธ์ ์๋์ ๊ฐ์ด ์ด์ด์ง๋๋ค.
โ where
where
์ ์ด์ฉํด ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ records ๋ง์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
1
2
3
4
5
const user = await prisma.user.findUnique({
where: {
email: "hello@example.com",
},
})
โ orderBy
๋ ์ฝ๋๋ฅผ ๋ถ๋ฌ์ฌ ๋ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํ๊ณ , ๊ฐ์ ธ์ฌ ์ ์๋ค. ์ด ์์ ๋ title์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ํด records๋ฅผ ๊ฐ์ ธ์จ๋ค.
1
2
3
4
5
const posts = await prisma.post.findMany({
orderBy: {
title: "asc",
},
})
โ groupBy
๋ ์ฝ๋๋ฅผ ๊ทธ๋ฃนํํด์ ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด, groupBy๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ์๋ ์์ ๋ฅผ ํ๋์ฉ ์ดํด๋ณด์.
1
2
3
4
5
6
7
8
9
10
11
const groupUsers = await prisma.user.groupBy({
by: ["country"],
where: {
email: {
contains: "prisma.io",
},
},
_sum: {
profileViews: true,
},
})
- ๊ทธ๋ฃนํํ ๊ธฐ์ค์ ์ง์ ํ๋ค. ์์ ๋ โcountryโ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ค.
1
by: ["country"],
- ํํฐ๋ง ์กฐ๊ฑด์ด๋ค. ์ฌ๊ธฐ์๋ email์ด
prisma.io
๊ฐ์ ํฌํจํ๊ณ ์๋ ๊ฒฝ์ฐ๋ฅผ ์ ํํ๋ค.
1
2
3
4
5
where: {
email: {
contains: "prisma.io",
},
},
- ์ ํ ๋ ๊ทธ๋ฃน์ profileViews ํ๋ ๊ฐ์ ํฉ์ฐํ๊ณ , ๋ฐํํ๋ค.
1
2
3
_sum: {
profileViews: true,
},
- ๊ฒฐ๋ก ํ๋ง๋๋ก, prisma.io๊ฐ ํฌํจ๋ ์ฌ๋๋ค์ ์ฌ๋ฌ ๊ทธ๋ฃน (ex) ํ๊ตญ, ๋ฏธ๊ตญ, ์ค๊ตญ ๋ฑ country ๊ธฐ์ค)์ผ๋ก ๋๋ ๋ค์ ๊ฐ ๊ทธ๋ฃน์ profileView์ ๊ฐ์ ๋ํด์ ๋ฐํํ๋ ๊ฒ์ด๋ค!
โ select
๋ ์ฝ๋๋ฅผ ๋ถ๋ฌ์ฌ ๋ ์ํ๋ ํ๋ ๊ฐ๋ง ์ ํํด ๋ถ๋ฌ์ฌ ์ ์๋ค. ์๋ ์์ ๋ title์ด โ๋ธ๋ก๊ทธโ์ธ post๋ค์ ์ ํํ๊ณ ํด๋น ๋ ์ฝ๋์ author ์ ๋ณด์ date์ ๋ณด๋ง ๊ฐ์ ธ์จ๋ค.
1
2
3
4
5
6
7
8
9
const posts = await prisma.post.findMany({
select: {
author: true,
date: true,
},
where: {
title: "๋ธ๋ก๊ทธ",
},
})
โ Count
์นด์ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฒด ํ๋ ์๋ฅผ ๊ณ์ฐํ ์ ์๋ค. ์๋ ์์ ๋ user ํ ์ด๋ธ์ ์ ์ฒด records ์๋ฅผ ๋ฐํํ๋ค.
1
const userCount = await prisma.user.count()
์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ์ ๊ฐฏ์๋ ์ ์ ์๋ค! ์ด ์์ ๋ authorId๊ฐ 29์ผ ๊ฒ์๋ฌผ์ ๊ฐฏ์๋ฅผ ์ธ๋ ์์ ์ด๋ค.
1
2
3
4
5
const postCount = await prisma.post.count({
where: {
authorId: 29,
},
})
โ Pagination
record๋ฅผ ๋ถ๋ฌ์ฌ ๋ ์ํ๋ ๋ถ๋ถ๋ง ๋ถ๋ฌ์ค๊ณ ์ถ์ ๋๊ฐ ์๋ค. ์ด ๋์๋ skip
(๊ฑด๋๋ฐ๊ธฐ)๊ณผ take
(๊ฐ์ ธ์ค๊ธฐ)๋ฅผ ์ฌ์ฉํด ํน์ ์์ ๊ฒฐ๊ณผ๋ฅผ ๊ฑด๋๋ฐ๊ณ ์ ํ๋ ๋ฒ์๋ฅผ ์ ํํด ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ด ์์ ์์๋ ์ฒ์ 3๊ฐ์ ๋ ์ฝ๋๋ฅผ ๊ฑด๋๋ฐ๊ณ 4~7๋ฒ ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ์จ๋ค.
1
2
3
4
const results = await prisma.post.findMany({
skip: 3,
take: 4,
})
ํด๋น ๋ด์ฉ์ ํํฐ๋งํ ๊ฐ๋ค ์ค์์ ์ ํํ ์๋ ์๋ค. ์ด ์์ ์์๋,
- ์ด๋ฉ์ผ ํ๋์ prisma.io๊ฐ ํฌํจ๋ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ์ ํํ๋ค.
- title์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๋ค.
- 1~2 ์ฒ๋ฆฌ๊ฐ ์๋ฃ ๋ ํ, ์ฒ์ 200๊ฐ ๋ ์ฝ๋๋ฅผ ๊ฑด๋๋ฐ๊ณ 201~220๊ฐ ๋ ์ฝ๋๋ฅผ ๋ฐํํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
const results = await prisma.post.findMany({
skip: 200,
take: 20,
where: {
email: {
contains: "Prisma",
},
},
orderBy: {
title: "desc",
},
})
๐ฉ๋ง๋ฌด๋ฆฌ
์ผ๋จ ๋ด๊ฐ ์์ฃผ ์ธ ๋ด์ฉ๋ถํฐ 1์ฐจ์ ์ผ๋ก ์ ๋ฆฌ๊ฐ ๋๋ฌ๋ค! ๋ฌผ๋ก ์์ง ๋ ๋ง์ ๋ด์ฉ์ด ์กด์ฌํ์ง๋งโฆ๐ ๋ง์ฝ ํ๋ก์ ํธ ์งํ ์ค ๋ ๋ง์ ์กฐ๊ฑด์ ์ฌ์ฉํด์ผ ํ๋ฉด ๊ทธ ๋ ์กฐ๊ธ์ฉ ๋ ์ถ๊ฐํ๋ฉด์ ๋ณต์ตํ๋ ค๊ณ ํ๋ค. ์ญ์ ์ง์ ํด๋ณด๋ ๊ฒ ๋งํผ ์ต์ํด์ง๋๋ฐ ๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์!