GraphQL Mutation疑问:newPrice如何映射到Produce的price字段?
解答:newPrice 如何传递到 Produce 的 price 字段
核心靠Resolver链和数据持久化层的配合完成,拆解成3个关键步骤:
1. Mutation Resolver 接收并触发更新
UpdateProducePrice 这个Mutation本身有对应的Resolver,是整个流程的入口:
- 先从请求输入中拿到
produceItemId和newPrice - 接着调用数据库(或其他存储)的更新接口,把对应ID的商品价格替换成
newPrice
举个伪代码示例:
// UpdateProducePrice 的 Resolver 实现 const UpdateProducePrice = async (_, { input: { produceItemId, newPrice } }) => { // 调用数据库执行更新操作 await db.produce.update({ where: { id: produceItemId }, data: { price: newPrice } }); // 返回基础标识,供后续字段Resolver使用 return { produceItemId }; };
2. 数据持久化层完成值的替换
这一步是值传递的关键:Resolver把newPrice传给数据库的更新语句,数据库定位到对应ID的记录,将price字段的值覆盖为newPrice并持久化。完成后,存储里的商品价格已经是最新值。
3. 返回字段的 Resolver 拉取最新数据
当Mutation返回UpdateProducePriceResponse时,其中的produceItem字段也有专属Resolver:
- 从父级(即Mutation Resolver返回的对象)拿到
produceItemId - 去数据库查询该ID对应的最新商品数据,此时返回的
price就是更新后的newPrice
伪代码示例:
// UpdateProducePriceResponse 中 produceItem 字段的 Resolver const produceItem = async (parent) => { // parent 是 Mutation Resolver 返回的 { produceItemId } return await db.produce.findUnique({ where: { id: parent.produceItemId } }); };
关于Resolver的底层逻辑
Resolver本质是字段级的处理函数:每个GraphQL类型(包括Mutation、查询类型、自定义对象类型)的每个字段,都可以对应一个Resolver,负责获取或计算该字段的值。整个流程就是不同Resolver按调用顺序形成链条,完成「接收参数→更新数据→返回最新结果」的闭环。
内容的提问来源于stack exchange,提问作者Ananth
相关产品推荐
相关产品推荐

