Fauna GraphQL执行mutation报ArtworkEntryImageRelation无src字段错误
报错原因
Fauna GraphQL 对对象类型字段的默认处理逻辑是将其映射为独立集合的文档关联,而非嵌入式对象。你当前Schema中ArtworkEntry的image字段没有额外指令修饰时,Fauna会自动为其生成ArtworkEntryImageRelation关联类型,该类型仅支持传入关联文档的ID标识,不接受src/alt这类Image本体的属性字段,因此触发报错。
额外注意:你原有mutation的返回值部分直接写image也不符合GraphQL规范,对象类型需要明确指定要返回的子字段。
解决方案
根据你对Image数据的存储需求二选一即可:
- 方案一:将Image作为嵌套字段直接存入ArtworkEntry文档(不单独建Image集合,适合图片仅属于单个商品、不需要复用的场景)
给image字段添加@embedded指令,修改后的Schema如下:
重新上传Schema后,原有mutation只需调整返回字段部分即可正常运行,修改后mutation参考:type Image { src: String! alt: String! } type ArtworkEntry { name: String! category: String! price: Int! currency: String! image: Image @embedded }mutation CreateArtworkEntry { createArtworkEntry(data: { name: "DDD" category: "DDD" price: 101 currency: "USD" image: { src: "https://www.pexels.com/photo/26938/" alt: "商品展示图" } }) { name category price currency image { src alt } } } - 方案二:将Image作为独立集合存储(适合图片可被多个商品复用的场景)
这种场景下不能在创建ArtworkEntry时直接写入Image的属性,需要分两步操作:- 先调用mutation创建独立的Image文档,拿到返回的文档
_id
mutation CreateImage { createImage(data: { src: "https://www.pexels.com/photo/26938/" alt: "商品展示图" }) { _id } }- 创建ArtworkEntry时,通过
connect字段关联上一步拿到的Image文档ID
mutation CreateArtworkEntry { createArtworkEntry(data: { name: "DDD" category: "DDD" price: 101 currency: "USD" image: { connect: "替换为上一步返回的Image文档_id" } }) { name category price currency image { src alt } } } - 先调用mutation创建独立的Image文档,拿到返回的文档
内容的提问来源于stack exchange,提问作者Dewald
相关产品推荐
相关产品推荐

