为与 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
},
}
})
我有两个模型,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
},
}
})