【问题标题】:How to connect multiple m-n relationship records如何连接多个 m-n 关系记录
【发布时间】:2021-07-18 07:59:10
【问题描述】:

我的架构如下所示:

model School {
  id       Int       @id @default(autoincrement())
  name     String
  teachers Teacher[]
  students Student[]
}

model Teacher {
  id        Int       @id @default(autoincrement())
  firstName String
  lastName  String
  schools   School[]
  students  Student[]
}

model Student {
  id        Int     @id @default(autoincrement())
  firstName String
  lastName  String
  teacherId Int
  teacher   Teacher @relation(fields: [teacherId], references: [id])
  schoolId  Int
  school    School  @relation(fields: [schoolId], references: [id])
}

我想在一次通话中创建一所学校,有老师和学生。这是我的尝试:

prisma.school.create({
    data: {
        name: "Best",
        teachers: {
            create: {
                id: 2,
                firstName: "Charles",
                lastName: "Wise",
                students: {
                    create: {
                        firstName: "Pauline",
                        lastName: "Jenkins",
                        school: {
                            connect: {
                                id: -1 // How to reference a school that is being created?
                            }
                        }
                    }
                }
            }
        }
    }
});

不幸的是,我不知道在创建学生时如何传递学校的 id。

我知道我可以分两次调用,首先用老师创建一个学校,然后用刚刚创建的学校和老师创建一个学生:

const school = await prisma.school.create({
    data: {
        name: "Best",
        teachers: {
            create: {
                id: 2,
                firstName: "Charles",
                lastName: "Wise",
            }
        }
    },
    include: {
        teachers: true,
    }
});
await prisma.student.create({
    data: {
        firstName: "Pauline",
        lastName: "Jenkins",
        school: {
            connect: {
                id: school.id
            }
        },
        teacher: {
            connect: {
                id: school.teachers[0].id
            }
        }
    }
});

但这看起来有点奇怪且容易出错。

有没有办法将其重写为单个调用?

【问题讨论】:

    标签: node.js typescript postgresql prisma


    【解决方案1】:

    您可以尝试此代码 sn-p 以在记录存在时连接到记录,或者在记录不存在时随时创建。

    prisma.teachers.create({
            data: {
                id: 2,
                firstName: 'Charles',
                lastName: 'Wise',
                students: {
                    create: {
                        firstName: 'Pauline',
                        lastName: 'Jenkins',
                    },
                },
                school: {
                    connectOrCreate: {
                        where: {
                            name: 'best',
                        },
                        create: {
                            name: 'best',
                        },
                    },
                },
            },
        });
    

    【讨论】:

      猜你喜欢
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 2014-12-27
      • 2021-03-02
      相关资源
      最近更新 更多