Resolver 是对 Graphql 进行困难查询的最佳实践?

Resolver is the best practice for difficult query to Graphql?

我正在通过 Laravel 学习 GraphQL。 当我需要从困难的查询中响应时(包括子查询或分组依据) 我可以用解析器做到这一点。

例如

select * from A where id in (select id from B where name='~~')

但我想知道这是响应的最佳方式(最佳实践)。 谁能给我答案?

我的最佳做法是从数据库表的角度进行思考,并将思考重点放在领域模型上。

所以领域模型对象图应该有两种类型 A 和 B,并且它们应该通过字段以某种方式相互关联。

假设A是一支足球队,B是一名球员。所以基本上,你想在这个 SQL:

中做什么
select * from A where id in (select a_id from B where name='~~')

就是从领域模型的角度,找出所有包含名字叫blablabla的球员的足球队信息。

所以也许我们可以有两种类型 TeamPlayer :

type Team {
    id      : Int!
    name    : String
    address : String
    players : [Player]
}
type Player {
    id    : Int!    
    name  : String
    age   : Int
    team  : Team
}

要获取所有足球队数据,我们需要对其进行根查询:

extend type Query {
   teams : [Team]
}

由于我们需要根据某些条件过滤返回的团队,我们可以设计一个输入对象来表示这样的过滤器:

input TeamFilter {
  includePlayerName : String
}

并将此过滤器应用于团队 query.It 然后变为:

extend type Query {
   teams (filter: TeamFilter) : [Team]
}

现在,我们可以创建一个查询来定义我们想要检索的内容。例如:

query {
    teams(filter : {
      includePlayerName : "*Peter*"  
    }){
       id 
       name
    }
}

相当于SQL:

  select id, name from Team where id in (select team_id from Player where name likes '%Perter%')