postgresql - 使用 Prisma 的嵌套创建查询返回未定义

标签 postgresql prisma prisma-graphql

我正在开发一款使用 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 记录一起返回。这适用于所有查询,包括 createfind

要获取 exercises 字段,您应该使用 includeselect .如果您想返回关系中的所有字段,则首选 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/

相关文章:

reactjs - 下一个带有 Prisma 的 js : Upsert based on two conditions

node.js - 如何在没有 ID 的情况下在 Prisma 中更新插入新记录?

error-handling - 仅返回GraphQL中的子解析器错误

postgresql - postgres 中的日期减法

database - 如何有效连接3张表 M :N

python - 对混合有字母的实数列表进行排序

java - 每个连接的 Postgres 并发事务

node.js - PRISMA:身份验证 token 无效:未提供 'Authorization' header

prisma - 我如何编写一个 Prisma findFirst where 子句,即 OR 的两个 AND,或者 Prisma 如何处理未定义的?

node.js - Prisma 绑定(bind)无法连接到 prisma 服务器。请求 http ://localhost:4466/failed, 原因 : connect ECONNREFUSED 127. 0.0.1:4466