GraphQL 和燈塔庫的新手,不要太苛刻。
因為我的資料源是一個 API,所以我不能使用任何模型。我正在嘗試創建一個自定義決議器,它將資料傳遞給一個服務,該服務將執行從 API 檢索資料所需的一切。
它不斷地向我回傳這個錯誤:"Field \"address\" of type \"[Address!]\" must have a sub selection.",
我相信這是因為我不使用模型(只是一個瘋狂的猜測)
到目前為止,我的架構如下所示:
type Query {
address(address: String!): [Address!] @field(resolver: "Address@resolve")
}
type Address {
fullAddress: String!
lowestId: Int!
}
和提到的決議器:
public function resolve($rootValue, array $args, GraphQLContext $context, ResolveInfo $resolveInfo): array
{
return array_map(
function ($address): array {
return [
'fullAddress' => $address->getFullAddress()
];
},
$this->service->getAddress($args['address'])
);
}
先感謝您!
uj5u.com熱心網友回復:
該錯誤甚至不是 Lighthouse 特有的,任何 GraphQL 服務器都會為您嘗試執行的操作產生類似的錯誤。我假設您正在嘗試這樣的查詢:
{
address(address: "foo")
}
考慮圖表中GraphQL:服務器描述可用的資料型別和它們之間的關系,形成了一個曲線圖。每種型別都可以有指向另一種型別的欄位,而該型別又可以指向另一種型別,依此類推。這些參考甚至可以形成回圈。在某些時候,圖可能會結束:標量值等型別標記了圖的葉子。
現在,服務器如何知道您想要查看圖形的哪一部分并且應該決議它?通過查詢:該圖的一部分的子選擇。這自然限制了服務器必須運行的深度,它可以做最少的作業來回傳您查詢的圖形部分。
查詢規則之一是您必須始終以葉節點結束。這就是錯誤訊息發揮作用的地方:服務器發現它Address不是葉子型別,因此要求您指定要遍歷圖形的深度。一個作業查詢可以是:
{
address(address: "foo") {
fullAddress
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/354614.html
標籤:php 拉拉维尔 图形 laravel-灯塔
上一篇:如何在父類方法中克隆子類實體
