在Hygraph CMS与Expo中发布图片遇问题求助
解决Hygraph中创建Review时关联图片仅处于草稿状态的问题
你的问题核心有两个关键点:
mutation中的查询字段误用:你当前使用的
publishManyReviewsConnection和publishManyAssetsConnection是查询类型字段,并非执行发布操作的mutation。它们只会返回已发布内容的连接数据,不会触发任何发布动作。你的Review能被发布,大概率是因为在Hygraph Schema设置中,Review类型的create操作被配置为自动发布,而Asset类型没有开启这个设置。Asset未被主动发布:通过
userImage: { create: { uploadUrl: $uploadUrl } }创建的Asset默认处于草稿状态,需要手动调用发布mutation才能转为已发布状态。
解决方案一:开启Asset的自动发布(最简单)
进入Hygraph后台的Schema编辑器:
- 找到
Asset类型,点击进入编辑界面 - 切换到Mutations标签页,找到
createAssetmutation - 勾选Auto Publish选项,保存更改
之后通过createReview创建关联Asset时,Asset会自动发布,无需额外操作。
解决方案二:手动分步发布(更灵活,适合需要控制发布时机的场景)
如果不想开启自动发布,可以通过两步mutation完成创建+发布:
第一步:创建Review并获取关联Asset的ID
mutation CreateReviewDraft( $businessId: ID! $userId: String! $uploadUrl: String! $userName: String! $rating: Int! $comment: String! ) { createReview( data: { business: { connect: { id: $businessId } } userId: $userId userName: $userName userImage: { create: { uploadUrl: $uploadUrl } } rating: $rating comment: $comment } ) { id userImage { id # 获取刚创建的Asset的ID } } }
第二步:发布Review和对应的Asset
mutation PublishReviewAndAsset( $reviewId: ID! $assetId: ID! ) { publishReview(where: { id: $reviewId }) { id } publishAsset(where: { id: $assetId }) { id } }
在Apollo Client中,你可以通过链式调用这两个mutation:先执行创建草稿的mutation,拿到reviewId和assetId后,再执行发布mutation。
注意事项
- 如果你之前误以为
publishManyReviewsConnection在执行发布,需要替换为真正的发布mutation(publishReview或publishManyReviews,后者需要指定筛选条件) - 确保你的API密钥拥有发布Asset的权限,否则会出现权限错误
内容的提问来源于stack exchange,提问作者Umar Milanzi Snr
相关产品推荐
相关产品推荐

