Post

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,
  },
})
  1. ๊ทธ๋ฃนํ™”ํ•  ๊ธฐ์ค€์„ ์ง€์ •ํ•œ๋‹ค. ์˜ˆ์ œ๋Š” โ€˜countryโ€™๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.
1
  by: ["country"],
  1. ํ•„ํ„ฐ๋ง ์กฐ๊ฑด์ด๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” email์ด prisma.io๊ฐ’์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์„ ํƒํ•œ๋‹ค.
1
2
3
4
5
  where: {
    email: {
      contains: "prisma.io",
    },
  },
  1. ์„ ํƒ ๋œ ๊ทธ๋ฃน์˜ profileViews ํ•„๋“œ ๊ฐ’์„ ํ•ฉ์‚ฐํ•˜๊ณ , ๋ฐ˜ํ™˜ํ•œ๋‹ค.
1
2
3
  _sum: {
    profileViews: true,
  },
  1. ๊ฒฐ๋ก  ํ•œ๋งˆ๋””๋กœ, 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,
})

ํ•ด๋‹น ๋‚ด์šฉ์„ ํ•„ํ„ฐ๋งํ•œ ๊ฐ’๋“ค ์ค‘์—์„œ ์„ ํƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ๋Š”,

  1. ์ด๋ฉ”์ผ ํ•„๋“œ์— prisma.io๊ฐ€ ํฌํ•จ๋œ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์„ ํƒํ•œ๋‹ค.
  2. title์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•œ๋‹ค.
  3. 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์ฐจ์ ์œผ๋กœ ์ •๋ฆฌ๊ฐ€ ๋๋‚ฌ๋‹ค! ๋ฌผ๋ก  ์•„์ง ๋” ๋งŽ์€ ๋‚ด์šฉ์ด ์กด์žฌํ•˜์ง€๋งŒโ€ฆ๐Ÿ˜‚ ๋งŒ์•ฝ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ค‘ ๋” ๋งŽ์€ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉด ๊ทธ ๋•Œ ์กฐ๊ธˆ์”ฉ ๋” ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ๋ณต์Šตํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์—ญ์‹œ ์ง์ ‘ ํ•ด๋ณด๋Š” ๊ฒƒ ๋งŒํผ ์ต์ˆ™ํ•ด์ง€๋Š”๋ฐ ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—!

๐Ÿ—‚๏ธ์ฐธ๊ณ  ์‚ฌ์ดํŠธ

This post is licensed under CC BY 4.0 by the author.