【发布时间】:2022-02-18 02:17:52
【问题描述】:
我在 Prisma 中进行播种,我正在努力寻找不是超级基本的示例。在下面的示例中,我想创建一个User(作者),他创作了多个Services (1:n),并且每个Service 都可以来自一个Provider。
-
User- 1:n -Services -
Servicesm:1 -Provider
在下面的示例中,创建过程会在 Provider 表上产生 3 个“AWS”实例。考虑到使用的语法,这很有意义。我想分别拥有 AWS、GCP 和 AZURE(我的提供商枚举)的一个记录。
另外,如果有人有一个更有说服力的例子来说明如何生成它以使种子更具可扩展性,请告诉我。
seed.ts
const main = async () => {
await prisma.user.create({
data: {
email: "moderator@gmail.com",
username: "timothy",
role: "MODERATOR",
authored: {
create: [
{
name: "Simple Storage Service",
acronym: "S3",
provider: {
create: {
name: "AWS", // how can these all reference the same Provider table row?
},
},
},
{
name: "DynamoDB",
acronym: "DynamoDB",
provider: {
create: {
name: "AWS",
},
},
},
{
name: "API Gateway",
acronym: "API Gateway",
provider: {
create: {
name: "AWS",
},
},
},
{
name: "BigQuery",
acronym: "BigQuery",
provider: {
create: {
name: "GCP",
},
},
},
],
},
},
});
};
schema.prisma
enum Providers {
AWS
GCP
AZURE
}
enum Role {
USER
MODERATOR
ADMIN
}
model User {
id Int @id @default(autoincrement())
email String @unique @db.VarChar(255)
username String @unique @db.VarChar(255)
role Role @default(USER)
createdAt DateTime @default(now())
authored Service[]
}
model Service {
id Int @id @default(autoincrement())
name String @unique @db.VarChar(255)
acronym String @unique @db.VarChar(255)
authorId Int
providerId Int
author User @relation(fields: [authorId], references: [id])
provider Provider @relation(fields: [providerId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Provider {
id Int @id @default(autoincrement())
name Providers
Services Service[]
createdAt DateTime @default(now())
}
Provider 表中的当前结果。不应有“AWS”的重复(三次)。
【问题讨论】:
标签: postgresql prisma prisma2