我正在开发一款使用 Graphql Prisma 和 Postgres 作为后端的锻炼应用程序。 到目前为止,我的棱镜模式如下:
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Exercise {
id Int @id @default(autoincrement())
name String
numSets Int
holdTime Int?
owner Workout? @relation(fields: [workoutId], references: [id])
workoutId Int?
}
model Workout {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
category String
exercises Exercise[]
}
该架构定义了一个 Workout 对象,该对象包含一个类别和一个练习列表。我正在尝试使用 Prisma 的嵌套创建查询创建包含对象列表的锻炼,但是未创建练习列表。我无法确定我的架构或脚本是否有问题。
我用来测试创建的脚本是:
const { PrismaClient } = require("@prisma/client")
const prisma = new PrismaClient()
async function main() {
const newWorkout = await prisma.workout.create({
data: {
category: 'Push',
exercises: {
create: [
{
name: "pushup",
numSets: 5
},
{
name: "headstand",
numSets: 3,
holdTime: 30
}
]
}
}
})
console.log(newWorkout)
const workout = await prisma.workout.findUnique({
where: {
id: 1
}
})
console.log(workout.exercises)
}
main()
.catch(e => {
throw e
})
.finally(async () => {
await prisma.$disconnect()
})
打印语句的输出:
控制台日志(新锻炼): “{ 编号:1, 创建于:2021-11-09T07:03:40.844Z, 更新时间:2021-11-09T07:03:40.848Z, 类别:“推送” }”
console.log(锻炼.练习): “未定义”
最佳答案
Prisma 默认不获取 relation
字段。因此,exercises
字段不会随 workout
记录一起返回。这适用于所有查询,包括 create
和 find
。
要获取 exercises
字段,您应该使用 include
或 select
.如果您想返回关系中的所有字段,则首选 include
,而 select
允许您指定要返回的确切字段。
这是返回 exercises
字段的代码的更新版本:
const newWorkout = await prisma.workout.create({
data: {
category: 'Push',
exercises: {
create: [
{
name: "pushup",
numSets: 5
},
{
name: "headstand",
numSets: 3,
holdTime: 30
}
]
}
},
include: {
exercises: true
}
})
console.log(newWorkout)
let workout = await prisma.workout.findUnique({
where: {
id: 1
},
include: {
exercises: true
}
})
console.log(workout.exercises)
关于postgresql - 使用 Prisma 的嵌套创建查询返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69894113/