:)
我正在使用Lighthouse启动一个新的Laravel项目,并且在解决非根字段时遇到了问题。
根据这里的文档,对于每个具有复杂类型的字段,都应该为该字段提供一个模型和一个查询。
在这个例子中,我有一个Version
对象,它有两个子字段:appVersion
和apiVersion
。下面是我的schema.graphql
文件中的内容:
type Query {
version: Version
}
type Version {
appVersion: String
apiVersion: String
}
另外,这是我的Version
模型:
<?php
namespace App\Models;
class Version {
private string $appVersion;
private string $apiVersion;
public function __construct() {
$composer = file_get_contents('../composer.json');
$content = json_decode($composer, true);
$this->appVersion = $content['app-version'];
$this->apiVersion = $content['version'];
}
public function getAppVersion() : string {
return $this->appVersion;
}
public function getApiVersion() : string {
return $this->apiVersion;
}
function export() : array {
return [
'app' => $this->getAppVersion(),
'api' => $this->getApiVersion(),
];
}
}
Version
的查询文件:
<?php
namespace App\GraphQL\Queries;
use GraphQL\Type\Definition\ResolveInfo;
use Nuwave\Lighthouse\Support\Contracts\GraphQLContext;
final class Version {
public function __invoke ($version, array $args, GraphQLContext $context, ResolveInfo $resolveInfo) {
return $version->export()[$resolveInfo->fieldName];
}
}
然而,当我尝试使用以下语句查询版本时,$version
似乎总是空的:
{
version {
appVersion
}
}
我不知道为什么。我试着尽我所能地跟踪文档,但我可能在这里错过了一些非常简单的东西:/我还应该提到,查询简单字段(如没有子选择的字段)在这里对我很有效。任何帮助都将不胜感激:)
我实现了一个graphql解析器,但是模型没有正确解析。
2条答案
按热度按时间zbdgwd5y1#
App\GraphQL\Queries\Version::__invoke方法是一个字段解析器。该解析器的第一个参数是根值。可以将其视为树中该查询上面的查询的“父”值。在您的示例中,您从根“Query”类型查询版本,因此上面的树中没有值。这就是它为空的原因。
您的模式定义显示“There is a model with properties appVersion and apiVersion”(存在一个具有appVersion和apiVersion属性的模型)。因此,您的版本查询应该返回一个具有appVersion和apiVersion属性的数组或类。它不需要是一个有说服力的模型。
8fsztsew2#
将@字段指令添加到架构中: