
โ Prisma ์ค์
generator client {
provider = "prisma-client-js"
previewFeatures = ["referentialIntegrity"]
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
referentialIntegrity = "prisma"
}
โ User model
model User {
id Int @id @default(autoincrement())
phone Int? @unique
email String? @unique
name String
avatar String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
tokens Token[]
}
โ Token model
model Token {
id Int @id @default(autoincrement())
payload String @unique
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
userId Int
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([userId])
}
โ Foreign Key ๋ฒ์ ์ฐจ์ด
์์ prisma์ ๋ด๋ถ ๊ตฌ์กฐ์์๋
previewFeatures = ["referentialIntegrity"]์ referentialIntegrity = "prisma"์ ์ฌ์ฉํ๋ฉด DB์ foreign key(FK)๋ฅผ ์์ฑํ์ง ์๊ณ ๋ Prisma ๋ด๋ถ์์ ๊ด๊ณ๋ฅผ ์ ์งํ๊ธฐ ๋๋ฌธ์ ํ์ฌ ๊ฐ์ ์์์ฒ๋ผ npx prisma db push๋ฅผ ํ์์ ๋ ์๋ฌ๊ฐ ์์ด ์๋์ด ๋์์ง๋ง,
์ต์ ๋ฐฉ์์ธ relationMode = "prisma"์ ์ฌ์ฉํด์ ํ๋ ค๊ณ ํ๋ฉด ํ์ฌ prisma์ ๋ด๋ถ๊ตฌ์กฐ์์๋ foreign key๋ฅผ DB์ ์์ฑํ๋ ค๋ ์๋๋ฅผ ํ๋๋ฐ, ์ด๊ฒ์ PlanetScale์ ๊ธฐ๋ฐ์ธ vitess๊ฐ foreign key๋ฅผ ํ์ฉํ์ง ์์, npx prisma db push๋ฅผ ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ 2๊ฐ์ง๋ค.
1. deprecated ๋์์ง๋ง previewFeatures = ["referentialIntegrity"]์ referentialIntegrity = "prisma"์ ์ฌ์ฉํ์ฌ ๊ทธ๋๋ก ์งํ
2. relationMode = "prisma"์ ์ฌ์ฉํ๊ณ
user User @relation(fields: [userId], references: [id]) ์ด field๋ฅผ ์ ๊ฑฐํ๋ค.
์ด ๋ฐฉ๋ฒ์ relation์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก
const token = await prisma.token.findUnique({ where: { id: 1 } });
const user = await prisma.user.findUnique({ where: { id: token.userId } });
์ด๋ฐ ์์ผ๋ก ์๋์ผ๋ก ๊ด๊ณํ join์ ๊ตฌํํด์ผ ํ๋ค.
โ Token ์์ฑ
const { phone, email } = req.body;
const user = phone ? { phone: +phone } : email ? { email } : null;
if (!user) return res.status(400).json({ ok: false });
const payload = Math.floor(100000 + Math.random() * 900000) + "";
const token = await client.token.create({
data: {
payload,
user: {
connectOrCreate: {
where: {
...user,
},
create: {
name: "Anonymous",
...user,
},
},
},
},
});
connect
์๋ก์ด ํ ํฐ์ ์ด๋ฏธ ์กด์ฌํ๋ ์ ์ ์ ์ฐ๊ฒฐํด์ค๋ค.
create
์๋ก์ด ํ ํฐ์ ๋ง๋ค๋ฉด์ ์๋ก์ด ์ ์ ๋ ๋ง๋ ๋ค.
connectOrCreate
์ ์ ๋ฅผ ์ฐพ์ผ๋ฉด ํ ํฐ๊ณผ connect, ๋ชป ์ฐพ์ผ๋ฉด create ํด์ค๋ค.
whrere์ create์ด ํ์ํ๋ค.
user๋ฅผ ์ฐพ๊ฑฐ๋ ์์ฑํ๋ ๋ถ๋ถ์ ์ฝ๋๊ฐ ํ์ ์์ด์ง๋ค.
โ _count
model User {
id Int @id @default(autoincrement())
phone String? @unique
email String? @unique
name String
avatar String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
tokens Token[]
products Product[]
favs Fav[]
posts Post[]
answers Answer[]
wonderings Wondering[]
}
ํด๋น model์์ tokens, products, favs, posts, answers, wonderings๋ _count๋ก ํด๋น ๋ชจ๋ธ์ ์๋ฅผ ์ ์ ์๋ค.
'๐ Prisma' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Prisma - Prisma v7 ์ฌ์ฉ๋ฒ (0) | 2026.01.16 |
|---|---|
| Prisma - schema.prisma์์ model ๊น๋ํ๊ฒ ์๋ ์ ๋ ฌํ๊ธฐ (0) | 2025.09.24 |
| Prisma - findUnique, create, upsert (0) | 2025.06.02 |
| Prisma - ์์ํ๊ธฐ (0) | 2025.05.26 |