具有父子关系的 2 个实体的 GraphQL 突变返回第二个实体的旧值
Posted
技术标签:
【中文标题】具有父子关系的 2 个实体的 GraphQL 突变返回第二个实体的旧值【英文标题】:GraphQL mutation for 2 entities with parent-child relation returns old value for second entity 【发布时间】:2021-04-30 05:32:53 【问题描述】:我正在使用阿波罗服务器。
在修改数据时,我需要更新 2 个表:location
和 address
。
解析器函数结束:
const locationUpdated = await db.location.updateLocation(user.id, location);
const addressUpdated = await db.address.updateAddress(user.id, location.address);
return error: null, location: ...locationUpdated, address: addressUpdated ;
使用 GraphQL Playground:
mutation
updateLocation(
location:
id: 1
label: "label12"
address:
city: "city12"
)
error
location
label
address
city
因此我有新的location.label
但旧的location.address.city
:
"data":
"updateLocation":
"error": null,
"location":
"label": "label12",
"address":
"city": "city11",
数据库已正确更新。看起来服务器使用缓存?
【问题讨论】:
【参考方案1】:你可以尝试以下两种方式
-
覆盖服务器缓存设置。 Ref
const server = new ApolloServer(
// ...
cacheControl:
defaultMaxAge: 0,
,
));
type Post @cacheControl(maxAge: 240)
id: Int!
title: String
author: Author
votes: Int @cacheControl(maxAge: 30)
comments: [Comment]
readByCurrentUser: Boolean! @cacheControl(scope: PRIVATE)
type Comment @cacheControl(maxAge: 1000)
post: Post!
-
更新
id
。 Ref
updateLocation(
location:
id //from the doc, I saw that the id must be updated as well, you can try take out the hard code `1`
label: "label12"
address:
city: "city12"
)
【讨论】:
我不想关闭缓存或更改实体的生命周期。我想以某种方式刷新缓存。 @koral 检查我更新的答案。我检查了文档,它可能与id
更新问题有关。在进行突变时也尝试更新id
。以上是关于具有父子关系的 2 个实体的 GraphQL 突变返回第二个实体的旧值的主要内容,如果未能解决你的问题,请参考以下文章
Prisma、GraphQL 和 Apollo 中具有突变的数据关系和连接类型
仅在父子实体具有 1 到 M 关系的核心数据中获取父实体的数据
Apollo / GraphQl - 单实体突变不更新缓存(数据库更新)
使用 NestJS、TypeORM、GraphQL 更新具有实体之间关系的 PSQL 表