更改相关字段而不更改原始字段

时间:2019-06-04 00:21:28

标签: graphql prisma

我有这样的架构:

type Game {
  id: ID! @id
  status: Boolean @default(value: false)
  time: DateTime!
  location: String!
  stadium: String!
  teams: [Team!]! @relation(name: "BothTeams")
}
type Team {
  id: ID! @id
  name: String!
  abbrName: String!
  teamLogo: String!
  score: Int @default(value: 0)
  games: [Game!]! @relation(name: "BothTeams")
}

游戏类型通常会返回两支球队,并且每支球队都有一个得分字段。

所以如果我以后想更新游戏,特别是分数字段,

我将不得不更改与更改后的球队的每场比赛的得分。

因此,有一种方法可以更改特定游戏的分数,而无需更改原始分数。

1 个答案:

答案 0 :(得分:0)

从概念上讲,score并不是特定团队的财产。您想将其表示为与两者团队和游戏相关联的独立实体。一种方法:

type Game {
  id: ID! @id
  status: Boolean @default(value: false)
  time: DateTime!
  location: String!
  stadium: String!
  teams: [Team!]! @relation(name: "BothTeams")
  scores: [Score!]! @relation(name: "ScoresByGame")
}
type Team {
  id: ID! @id
  name: String!
  abbrName: String!
  teamLogo: String!
  games: [Game!]! @relation(name: "BothTeams")
}
type Score {
  id: ID! @id
  value: Int @default(value: 0)
  team: Team @relation(name: "ScoreTeam")
}

或者您可以有一个scores字段和一个homeScore字段,而不是awayScore。无论哪种方式,您都将拥有一个Score节点,您可以对其进行突变而不会影响其他游戏。 Team的其他每个游戏可能会有所不同的属性都应进行类似处理(例如,如果您想包括玩过该特定游戏的玩家)。