Prisma upsertmany 问题提供了 List<Json>,预期为 SimilarCreateWithoutMovieInput

Posted

技术标签:

【中文标题】Prisma upsertmany 问题提供了 List<Json>,预期为 SimilarCreateWithoutMovieInput【英文标题】:Prisma upsertmany issue Provided List<Json>, expected SimilarCreateWithoutMovieInput 【发布时间】:2021-09-10 01:55:30 【问题描述】:

使用"@prisma/client": "^2.25.0"

 on prisma.upsertOneMovie. Provided List<Json>, expected SimilarCreateWithoutMovieInput or SimilarCreateWithoutMovieInput or SimilarUncheckedCreateWithoutMovieInput or SimilarUncheckedCreateWithoutMovieInput:
[0] type SimilarCreateWithoutMovieInput 
[0]   id: Int
[0]   backdrop_path: String
[0]   title: String
[0]   name: String
[0]   release_date: DateTime
[0]   overview: String
[0]   show: TVShowCreateNestedOneWithoutSimilarInput
[0] 

代码

const  PrismaClient  = require('@prisma/client')
const prisma = new PrismaClient()
...
        let result = await apiRequest
        let similar = result.similar.results.map(similar_movie => 
          return 
            id: similar_movie.id, 
            backdrop_path: similar_movie.backdrop_path, 
            title: similar_movie.title,
            name: similar_movie.name,
            release_date: similar_movie.release_date,
            overview: similar_movie.overview,
            movieId: result.id
          
        )

        const movie = 
        id: result.id,
...
        similar: 
            upsert: similar
          
        
        const upsertMovie = await prisma.movie.upsert(
          where:  id: movie.id ,
          update: movie,
          create: movie,
        )

这里是schema.prisma

model Movie 
  id                    Int         @id
...other fields and attributes...
similar             Similar[]


model Similar 
    id              Int         @id @default(autoincrement())
    tmdb_id         Int         @unique
    backdrop_path   String
    title           String?
    name            String?
    release_date    String
    overview        String
    movie           Movie?      @relation(fields: [movie_id], references: [id])
    show            TVShow?         @relation(fields: [show_id], references: [id])
    movie_id    Int?
    show_id Int?

Similar 应该是嵌套在特定Movie 对象中的其他Movies 的数组[],不能是它自己

我没有在生成类型上使用 prisma upsert 的经验,我收到了上述错误。我希望更新一个Movie,同时更新多个与Movie 相关的Similar 记录。

我曾尝试使用connectOrCreate,但它不支持创建similar 的多条记录,同时按预期创建movie 的一条记录 我该如何实现?

资源https://www.prisma.io/docs/concepts/components/prisma-client/relation-queries#nested-writeshttps://www.prisma.io/docs/concepts/components/prisma-client/relation-queries#connect-or-create-a-record

【问题讨论】:

【参考方案1】:

问题是 prisma createMany 在 sqlite 上不可用,而在 postgresql 连接器上却可用。

const movie = 
        ...result,
        similar: 
          connectOrCreate: result.similar.map(s => (
            create: s,
            where:  id: s.id ,
          ))
        
      

const upsertMovie = await prisma.movie.upsert(
          where:  id: movie.id ,
          update: movie,
          create: movie,
        )

【讨论】:

嗨@ridhwaan-shakeel,我对嵌套写入有类似的问题。我是否在这里构建了像movie 变量这样的对象,或者我可以通过嵌套关系传入完整的对象

以上是关于Prisma upsertmany 问题提供了 List<Json>,预期为 SimilarCreateWithoutMovieInput的主要内容,如果未能解决你的问题,请参考以下文章

正确声明 GraphQL Yoga 提供的 Prisma 字段但在解析器中不需要的方法

Nexus GraphQL Prisma 事件字段

在 Prisma docker 容器上添加健康检查路径

生成没有 DB 的 Prisma 模式,只有第 3 方 REST API

如何在没有 ID 的情况下在 Prisma 中插入新记录?

prisma 部署后,prisma 没有应用更改