Sanity.io API创建Mutation:如何将字符串识别为Reference类型
问题描述
我正在搭建一个电商网站,在向Order文档的orderItems数组中添加订单项时遇到问题。我尝试在orderItem中引用customer文档和product文档,当前提交的对象数组如下:
[ { productId: '5b79b3f8-6ef8-4c6d-bd85-5dcb14fb836d', kundenId: 'c3777230-74cd-411b-a455-7fa905c90957', quant: 1, name: 'Position 1' } ]
请问如何让Sanity将这些字符串识别为_ref?我的Schema定义如下:
Order Item Schema
export default { title: 'Order Item', name: 'orderItem', type: 'object', fields: [ { title: 'Name', name: 'name', type: 'string', }, { name: 'kundenId', title: 'Customer', type: 'reference', to: [{ type: 'customer' }], options: { disableNew: true, }, }, { name: 'productId', title: 'Product', type: 'reference', to: [{ type: 'product' }], options: { disableNew: true, }, }, { title: 'Quantity', name: 'quant', type: 'number', }, { title: 'Price', name: 'price', type: 'number', }, ], };
Order Schema
export default { name: 'order', title: 'Order', type: 'document', fields: [ { name: 'user', title: 'User', type: 'reference', to: [{ type: 'user' }], options: { disableNew: true, }, }, { name: 'userName', title: 'User Name', type: 'string', }, { title: 'Order Items', name: 'orderItems', type: 'array', of: [ { title: 'Order Item', type: 'orderItem', }, ], }, { title: 'CreatedAt', name: 'createdAt', type: 'datetime', }, ], };
错误提示截图:
解决方案
Sanity的reference类型字段要求传入的是包含_ref属性的对象,而非直接传入ID字符串。你需要修改提交的订单项结构,把productId和kundenId的字符串ID包装成符合引用格式的对象:
修改后的提交数组
[ { productId: { _ref: '5b79b3f8-6ef8-4c6d-bd85-5dcb14fb836d' }, kundenId: { _ref: 'c3777230-74cd-411b-a455-7fa905c90957' }, quant: 1, name: 'Position 1' } ]
额外说明
- 若要避免同ID不同文档类型的冲突,可额外添加
_type属性明确指定文档类型:productId: { _ref: '5b79b3f8-6ef8-4c6d-bd85-5dcb14fb836d', _type: 'product' } - 确保传入的ID对应存在有效的
customer和product文档,否则Sanity会验证失败。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

