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 字段但在解析器中不需要的方法