Payload CMS GraphQL枚举命名错误求助:冒号值触发报错
解决Payload CMS中GraphQL枚举命名错误的方案
问题原因
Payload CMS会自动把select字段的选项值转换成GraphQL枚举类型名称,但GraphQL要求枚举名称只能包含[_a-zA-Z0-9]字符。你的appointmentTime字段选项值(比如09:00)带冒号:,生成的枚举名_9:00违反了命名规则,所以触发报错。大概率是Payload新版本收紧了枚举命名的校验逻辑,才出现之前正常现在报错的情况。
排查与解决步骤
1. 直接修改选项value为合法格式
把选项的value改成符合GraphQL规则的字符串,用下划线替代冒号,同时保留label显示原时间即可:
// FormSubmission集合的字段配置示例 { name: 'appointmentTime', type: 'select', options: [ { label: '09:00', value: '09_00' }, { label: '10:00', value: '10_00' }, // 其他时间选项同理修改 ] }
2. 保留原存储值的兼容方案
如果需要数据库里存的还是带冒号的时间字符串,可以在字段配置里给每个选项手动指定合法的GraphQL枚举名称:
{ name: 'appointmentTime', type: 'select', options: [ { label: '09:00', value: '09:00', graphQL: { name: 'TIME_09_00' // 自定义合法的枚举名称 } }, { label: '10:00', value: '10:00', graphQL: { name: 'TIME_10_00' } } ] }
3. 清理缓存确保生效
修改配置后,执行以下操作:
- 删除Payload的缓存目录(默认是项目根目录下的
.payload文件夹) - 重启开发服务器
- 等待Payload自动重新生成GraphQL schema
4. 回退版本(临时应急)
如果以上方案暂时没法实施,可以回退到之前能正常运行的Payload版本,在package.json里指定具体版本号后执行yarn install:
{ "dependencies": { "payload": "x.x.x" // 替换成之前正常运行的版本号 } }
内容的提问来源于stack exchange,提问作者Philip
相关产品推荐
相关产品推荐

