如何在graphql中封装一种类型的数据以特定于父类型

How to encapsulate data of a type to be specific to the parent type in graphql

我有这个游戏类型:

type Game {
  id: ID! @id
  goals: [Goal]
}

与目标有关系:

type Goal {
  id: Int! @id(strategy: SEQUENCE) @sequence(name: "IncID", initialValue: 1, allocationSize: 20)
  thumbnail: String!
  player: String!
  minute: Int!
}

我试图通过那个 "id" 混乱来为目标创建一个增量 id 值,目的是为每个目标创建一个 url,如下所示:

domaine.com/game/{id-of-the-game}/goal/{incremental-id(1,2..)}

问题是,Goal 类型看起来像是一个独立的实体,即使是新游戏,它也会保留最后增加的 id。

所以我想为每个新游戏重置 id 序列。

使用@id 批注无法实现您的要求。 prisma 模型中的每个类型都需要有一个唯一的 id 来标识数据库中的对象。如果使用的基础数据库是 MongoDB,则会有一个包含文档的目标集合,每个文档代表一个由 id 标识的单独目标。如果使用的基础数据库是 MySQL/PostgreSQL,则目标将存储在目标 table 中,每一行代表一个单独的目标。

每个单独的对象(无论它是存储为文档还是行)都需要唯一标识才能访问它并创建关系,例如在目标对象和游戏对象之间。

如果每个游戏的目标 ID 从 1 开始,这将违反 id 字段的唯一约束,因为 table 或集合中的两个目标将由相同的 ID(例如 1)标识。

我的建议是简单地向目标类型添加类似 "numberInGame" 字段的内容,并在创建目标时填充它(例如,将 Game.type 中的 goals.length 放入考虑)。

希望这有助于阐明 id 字段的唯一性约束。