Lighthouse PHP中传入JSON类型参数执行mutation报错如何解决?
错误原因及解决方案
1. 明确的语法错误
你传入的config参数的JSON结构存在语法疏漏:第二个data数组里的"name": "name3"行末尾缺少英文逗号,直接导致整个表达式解析失败,这是编辑器全量标红的直接诱因。
// 错误代码片段 { "name": "name3" "quantity": 1 } // 修正后 { "name": "name3", "quantity": 1 }
2. GraphQL输入语法不规范
GraphQL的参数传递规则和纯JSON不同:直接写在请求体里的对象/数组,键名不需要加双引号包裹,你给所有键都加了双引号,不符合GraphQL的语法要求。
修正后的可执行写法
有两种常用的正确写法:
写法1:直接调整参数语法(适合简单测试)
把所有对象的键名的双引号去掉,补全遗漏的逗号即可:
mutation { createOrderTemplate( name: "SomeName", config: [ { w_name: "Name1", w_code: "001", place: "Place1", job: "job1", data: [ { name: "name1", quantity: 2 }, { name: "name2", quantity: 2 }, { name: "name3", quantity: 1 }, { name: "name4", quantity: 2 } ] }, { w_name: "Name2", w_code: "002", place: "Place2", job: "job2", data: [ { name: "name1", quantity: 2 }, { name: "name2", quantity: 2 }, { name: "name3", quantity: 1 }, { name: "name4", quantity: 2 } ] } ] ) { id name config } }
写法2:通过变量传递JSON(推荐,复杂度高的结构不容易出错)
在playground的Variables面板写入纯JSON格式的config值,请求体直接引用变量即可:
# 请求体 mutation CreateOrderTemplate($name: String!, $config: JSON!) { createOrderTemplate(name: $name, config: $config) { id name config } }
// Variables面板内容 { "name": "SomeName", "config": [ { "w_name": "Name1", "w_code": "001", "place": "Place1", "job": "job1", "data": [ {"name": "name1", "quantity": 2}, {"name": "name2", "quantity": 2}, {"name": "name3", "quantity": 1}, {"name": "name4", "quantity": 2} ] }, { "w_name": "Name2", "w_code": "002", "place": "Place2", "job": "job2", "data": [ {"name": "name1", "quantity": 2}, {"name": "name2", "quantity": 2}, {"name": "name3", "quantity": 1}, {"name": "name4", "quantity": 2} ] } ] }
额外注意事项
确认你的Laravel模型里已经把config字段添加到$casts数组,配置为array或者json类型,否则存入数据库时会出现格式错误:
// OrderTemplate模型中添加 protected $casts = [ 'config' => 'array', ];
内容的提问来源于stack exchange,提问作者Jana
相关产品推荐
相关产品推荐

