为与 prisma 的 1:n 关系创建对象

creating objects for 1:n relation with prisma

我有两个模型,Fish 和 BoardFish 具有 1:1 关系 - BoardFish 是一种 Fish 我创建了一些具有命名类型的种子鱼。

如何在 Prisma 中执行此操作?我想我有模式设置,但除了 fancy/nested 类型之外,插入数据并没有真正记录。

架构:

model Fish {
    name      String      @id
    boardFish BoardFish[]
}

model BoardFish {
    id       Int    @id @default(autoincrement())
    name     String
    fishType Fish   @relation(fields: [name], references: [name])
}

尝试创建:

        let fishes = []
        for (let c = 0; c < fishCount; c++) {
            const fishType = await prisma.fish.findFirst({ where: { name: 'salmon' } })
            const fishData = {
                fishType: fishType!.name,
                // name: 'salmon',
                px: 0,
                py: 0,
            }
            const fish = await prisma.boardFish.create({ data: fishData })
            fishes.push(fish)
        }

但我无法插入:

→ 35 const fish = await prisma.boardFish.create({
       data: {
         fishType: 'salmon',
                   ~~~~~~~~
         px: 3,
         py: 5
       }
     })

Argument fishType: Got invalid value 'salmon' on prisma.createOneBoardFish. Provided String, expected FishCreateNestedOneWithoutBoardFishInput:
type FishCreateNestedOneWithoutBoardFishInput {
  create?: FishCreateWithoutBoardFishInput | FishUncheckedCreateWithoutBoardFishInput
  connectOrCreate?: FishCreateOrConnectWithoutBoardFishInput
  connect?: FishWhereUniqueInput
}

所涉及的类型很难理解,Prisma 似乎真的能胜任大多数“魔法”,它有数千行自动生成的代码,我一直在挖掘这些代码,但运气不佳。

如果你想要 1:1 关系,我认为架构需要看起来更像这样:

model Fish {
    name      String      @id
    boardFish BoardFish? // removed autogenerated `[]` and made optional
}

model BoardFish {
    id       Int    @id @default(autoincrement())
    name     String
    fishType Fish   @relation(fields: [name], references: [name])
}

创建相关记录时,使用 prisma 的 connect api

const fish = await prisma.boardFish.create({
  data: {
    fishType: {
      connect: { name: 'salmon' }, // or `connectOrCreate` if it doesn't exist
    },
  }
})