使用 N 到 M Panics 进行查询

Query with N to M Panics

重现步骤

日志

  prisma-client { clientVersion: '2.13.1' }  
  prisma-client Error: PANIC: 1
  prisma-client 
  prisma-client This is a non-recoverable error which probably happens when the Prisma Query Engine has a panic.
  prisma-client 
  prisma-client https://github.com/prisma/prisma-client-js/issues/new?body=Hi+Prisma+Team%21+My+Prisma+Client+just+crashed.+This+is+the+report%3A%0A%23%23+Versions%0A%0A%7C+Name++++++++++++%7C+Version++++++++++++%7C%0A%7C-----------------%7C--------------------%7C%0A%7C+Node++++++++++++%7C+v12.18.3+++++++++++%7C+%0A%7C+OS++++++++++++++%7C+undefined%7C%0A%7C+Prisma+Client+++%7C+2.13.1+++++++++++++%7C%0A%0A%0A%0A%23%23+Logs%0A%60%60%60%0A++prisma-client+%7B+clientVersion%3A+%272.13.1%27+%7D++%0A%60%60%60&title=PANIC%3A+1&template=bug_report.md
  prisma-client 
  prisma-client If you want the Prisma team to look into it, please open the link above 
  prisma-client 
  prisma-client     at NodeEngine.handleRequestError (C:\Users\TreNr\AppData\Roaming\Prisma\Studio\e5cd9139\runtime\index.js:26642:21)
  prisma-client     at C:\Users\TreNr\AppData\Roaming\Prisma\Studio\e5cd9139\runtime\index.js:27295:36
  prisma-client     at processTicksAndRejections (internal/process/task_queues.js:97:5)
  prisma-client     at async PrismaClientFetcher.request (C:\Users\TreNr\AppData\Roaming\Prisma\Studio\e5cd9139\runtime\index.js:78094:24)
  prisma-client     at async X:\dev\familytreebackend\node_modules\@prisma\cli\build\index.js:104367:25
  prisma-client     at async X:\dev\familytreebackend\node_modules\@prisma\cli\build\index.js:104350:22
  prisma-client     at async Photon.request (X:\dev\familytreebackend\node_modules\@prisma\cli\build\index.js:104391:34)
  prisma-client     at async PhotonService.respond (X:\dev\familytreebackend\node_modules\@prisma\cli\build\index.js:104569:38)
  prisma-client     at async Object.StudioServer2.onWSMessage [as callback] (X:\dev\familytreebackend\node_modules\@prisma\cli\build\index.js:104717:29)  +30s
  prisma-client { clientVersion: '2.13.1' }  +5s
  1. 创建具有婚姻和用户之间 n 对 m 关系的数据库模式
...
model User {
  id         Int        @id @default(autoincrement())
  forename   String
  lastname   String
  marriages  Marriage[]
}

model Marriage {
  id    Int    @id @default(autoincrement())
  users User[]
}
  1. 迁移并启动工作室
npx prisma migrate dev --preview-feature
npx prisma studio
  1. 创建 2 个用户并在他们之间结婚

  2. 查询用户

恐慌并出现以下错误 https://github.com/prisma/prisma-client-js/issues/955

思想

似乎与 prisma.user.findMany().

直接相关

用作查询时

    Query: {
        users: (_, __, context) => {
            const pc: PrismaClient = context.prisma;
            return pc.user.findMany({ include: { marriages: true } });
        },
        user: async (_, args, context) => {
            const pc: PrismaClient = context.prisma;
            const users = pc.user.findUnique({ where: { id: parseInt(args.id) }, include: { marriages: true } });
            return users;
        }
    }
query {
  users {
    id
    marriages {
      id
    }
  }
}
query {
  user(id: 1) {
    id
    marriages {
      id
    }
  }
}

另一个观察:

只有结合 findMany 包含婚姻时才会发生。

    users: (_, __, context) => {
        const pc: PrismaClient = context.prisma;
        return pc.user.findMany({ include: { marriages: true } });
    }

如果不包括没有错误。如果它包含在 findUnique 中,它也不会起作用

上面观察到的问题似乎是最新版本中的错误。

详情:https://github.com/prisma/prisma-client-js/issues/955