[TOC]
#### 执行查询
执行查询是一个复杂的过程涉及多个步骤,包括查询解析(query parsing),验证,以及最后的针对schema的执行。
graphql-php在类GraphQL\GraphQL中为些过程提供了方便的接口.
~~~
use GraphQL\GraphQL;
$result = GraphQL::execute(
$schema,
$queryString,
$rootValue = null,
$contextValue = null,
$variableValues = null,
$operationName = null
);
~~~
方法返回包含 data 和 errors key值的数组(如果执行完全没有错误,则errors字段不存在),这个数组适合进一步的序列化。
#### execute执行参数
| 参数 | 类型 | 描述 |
| --- | --- | --- |
| schema | `GraphQL\Schema` | `必填` 你应用的schema的实例。 |
| queryString | `string` or `GraphQL\Language\AST\DocumentNode` | 查询字符串 或 文档节点 ,查询字符串最后也会转换成文档节点。graphql query string 会被解析,验证和执行。如果在执行之前已经在其它地方解析过,在这里传递对应的 ast document对象 以避免新的解析。 |
| rootValue | `mixed` | 传递给schema 中 root-level Object type 的数据,它作为 类型的 field resolvers的第一个参数传入,如果实际的根值由 Query 类型本身提取(如字段的参数)可以被忽略或设置为null |
| contextValue | `mixed` | 保存所有的 field resolvers 之间 共享的信息,可以是任意值,大多数情况下它传递当前登录者信息,及位置描述等。 在所有 field resolvers中作为回调函数的第三个参数变量 |
| variableValues | `array` | 伴随 query string 传递的变量数组,key值对应 query string中的变量声明。 |
| operationName | `string` | 在query string 包含多个顶级操作的情况下,允许调用者指定在query string中将运行哪一个 |