gpt4 book ai didi

postgresql - 如何在 Prisma 中播种关系

转载 作者:行者123 更新时间:2023-12-05 09:28:42 25 4
gpt4 key购买 nike

我正在 Prisma 中尝试播种,我正在努力寻找不是 super 基础的示例。在下面的示例中,我想创建一个 User(作者),他编写了多个 Services (1:n) 并且每个 Service 都可以来自一个 Provider

  • 用户 - 1:n - 服务
  • 服务 m:1 - 提供者

在下面的示例中,创建过程会在 Provider 表上生成 3 个“AWS”实例。考虑到所使用的语法,这是有道理的。我只想分别拥有 AWS、GCP 和 AZURE(我的提供商枚举)的一个记录

此外,如果有人有更 Eloquent 例子来说明如何生成它以提高种子的可扩展性,请告诉我。

种子.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",
},
},
},
],
},
},
});
};

架构.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”不应出现重复(一式三份)。

enter image description here

最佳答案

只需预先创建提供者,然后将其连接到服务:

const main = async () => {
const awsProvider = await prisma.providers.create({
data: { name: 'AWS' }
})

await prisma.user.create({
data: {
email: "moderator@gmail.com",
username: "timothy",
role: "MODERATOR",
authored: {
create: [
{
name: "Simple Storage Service",
acronym: "S3",
provider: {
connect: awsProvider
},
},

// ...

关于postgresql - 如何在 Prisma 中播种关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71162710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com