我正在使用Laravel学习GraphQL。 当我需要响应困难的查询(包括子查询或分组依据)时 我可以使用解析器来做到这一点。
例如。
从A的id中选择*(从B的name ='~~'中选择ID)
但是我不知道这是回应的最佳方法(最佳实践)。 谁能给我答案?
答案 0 :(得分:1)
我的最佳实践是从数据库表的角度进行思考,并将思考重点放在域模型上。
因此,领域模型对象图应具有两种类型A和B,并且它们应通过字段以某种方式彼此关联。
假设A是一支足球队,B是一名球员。因此,基本上,您想要在此SQL中做什么:
select * from A where id in (select a_id from B where name='~~')
从域模型的角度查找所有包含某个名字叫blablabla的球员的足球队信息。
所以也许我们可以有两种类型,分别称为Team
和Player
:
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
}
将此过滤器应用于团队查询,然后变为:
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%')