NextJS开发MealPlanner项目-05-复杂 Prisma 关系
编辑
5
2025-08-13
在Prisma中配置1对1、1对多、多对多的复杂数据表关系。
编辑prisma/schema.prisma文件,内容如下:
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
// npx prisma init --datasource-provider sqlite --output ../generated/prisma => creates a new sqlite database
// npx prisma migrate dev => creates a new migration and applies it to the database
// npx prisma studio => opens Prisma Studio to view your data
generator client {
provider = "prisma-client-js"
output = "../generated/prisma"
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
model User {
id Int @id @default(autoincrement())
name String
email String @unique
password String
meal Meal[]
role Role
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
enum Role {
USER
ADMIN
}
model Food {
id Int @id @default(autoincrement())
name String @unique
calories Float?
protein Float?
fat Float?
carbohydrates Float?
fiber Float?
sugar Float?
category Category? @relation(fields: [categoryId], references: [id])
categoryId Int?
foodServingUnit FoodServingUnit[]
meal Meal? @relation(fields: [mealId], references: [id])
mealId Int?
mealFood MealFood[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Category {
id Int @id @default(autoincrement())
name String @unique
foods Food[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model ServingUnit {
id Int @id @default(autoincrement())
name String @unique
foodServingUnit FoodServingUnit[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
mealFood MealFood[]
}
model FoodServingUnit {
id Int @id @default(autoincrement())
name String @unique
food Food @relation(fields: [foodId], references: [id])
foodId Int
servingUnit ServingUnit @relation(fields: [servingUnitId], references: [id])
servingUnitId Int
grams Float?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Meal {
id Int @id @default(autoincrement())
date DateTime
foods Food[]
user User @relation(fields: [userId], references: [id])
userId Int
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
mealFood MealFood[]
}
model MealFood {
id Int @id @default(autoincrement())
food Food @relation(fields: [foodId], references: [id])
foodId Int
meal Meal @relation(fields: [mealId], references: [id])
mealId Int
servingUnit ServingUnit @relation(fields: [servingUnitId], references: [id])
servingUnitId Int
amount Float
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
编辑完成后,由于修改的数据表内容过多,影响到migration生成,为了简单处理,直接在命令行执行如下命令,强制重置Prisma的Migration。
npx prisma db push --force-reset
- 0
-
分享