如何在GraphQL中变异关系字段?
假设你有两种类型的玩家技能如何在GraphQL中变异关系字段?,graphql,Graphql,假设你有两种类型的玩家技能 type PlayerSkills { playerID: Player health: Int attack: Int defence: Int } type Player { playerID: ID! playerName: String balance: Int playerSkills: PlayerSkills inventory: [Item] } 如果您创建一个变种来添加一个新玩家,您将如何告诉GraphQL一个
type PlayerSkills {
playerID: Player
health: Int
attack: Int
defence: Int
}
type Player {
playerID: ID!
playerName: String
balance: Int
playerSkills: PlayerSkills
inventory: [Item]
}
如果您创建一个变种来添加一个新玩家,您将如何告诉GraphQL一个特定的玩家与一个特定的技能集合相关联
mutation (
$playerID: ID!,
$playerName: String,
$balance: Int
$playerSkills: PlayerPlayerSkillsRelation
) {
createPlayer(data: {
playerID: $playerID,
playerName: $playerName,
balance: $balance,
playerSkills: $playerSkills
}) {
playerID
playerName
balance
playerSkills {
playerID
}
}
}
我认为你把输入部分复杂化了。通常,当您的突变操作与您的查询相同的数据时,它们即使不完全相同,也会非常相似。除非有其他要求,我会这样安排:
mutation (
$playerID: ID!,
$playerName: String,
$balance: Int
$playerSkills: PlayerSkillsInput
) {
createPlayer(data: {
playerID: $playerID,
playerName: $playerName,
balance: $balance,
playerSkills: $playerSkills
}) {
playerID
playerName
balance
playerSkills {
playerID
}
}
}
input PlayerSkillsInput {
health: Int
attack: Int
defence: Int
}
请注意,PlayerSkillsInput
中既没有playerSkillsRelation
,也没有字段playerID
。输入玩家只需要掌握自己的技能,而与玩家无关,因为您可以在实现代码中自己推断出这一点。只有被创建的玩家才能拥有这些技能,所以你不需要额外的输入字段
不能完全确定connect
和disconnect
,但如果需要,可以轻松地将它们添加到PlayerSkillsInput
mutation (
$playerID: ID!,
$playerName: String,
$balance: Int
$playerSkills: PlayerSkillsInput
) {
createPlayer(data: {
playerID: $playerID,
playerName: $playerName,
balance: $balance,
playerSkills: $playerSkills
}) {
playerID
playerName
balance
playerSkills {
playerID
}
}
}
input PlayerSkillsInput {
health: Int
attack: Int
defence: Int
}