Laravel9/Lighthouse6中能否在GraphQL Playground使用枚举值执行更新突变?
Laravel 9 + Lighthouse 6 枚举类型在GraphQL突变中的正确用法
能不能用VoteStatus::ACTIVE格式?
不能。VoteStatus::ACTIVE是PHP代码中调用枚举的语法,而GraphQL Playground遵循GraphQL自身的语法规范,完全不识别PHP的枚举调用方式,直接输入必然触发语法错误。
使用字符串"ACTIVE"仍报错的原因及解决办法
你遇到这个问题,大概率是以下环节出了问题:
- 枚举定义不匹配
确保PHP枚举的case值和GraphQL schema里的枚举值完全对应。比如PHP枚举定义:
对应的GraphQL schema要通过enum VoteStatus: string { case ACTIVE = 'ACTIVE'; case INACTIVE = 'INACTIVE'; }@enum指令关联:enum VoteStatus @enum(class: "App\\Enums\\VoteStatus") - 突变参数类型错误
检查updateVote突变的status参数类型是不是VoteStatus枚举,而非String。正确的突变定义示例:type Mutation { updateVote(id: ID!, status: VoteStatus!): Vote } - 调用时的语法错误
GraphQL枚举是独立类型,调用时不需要给值加引号。如果加了引号,值会被识别为字符串,和VoteStatus类型不匹配,自然报错。正确的调用写法:mutation { updateVote(id: "1", status: ACTIVE) { id status } }
总结
在GraphQL Playground中必须遵循GraphQL语法,直接使用枚举的原始值(无引号),不能用PHP的枚举调用格式。如果用字符串报错,先排查枚举定义、参数类型和调用语法这三个关键点。
内容的提问来源于stack exchange,提问作者mstdmstd
相关产品推荐
相关产品推荐

