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

时间:2019-06-30 12:34:44

标签: graphql prisma prisma-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} / goal / {incremental-id(1,2 ..)}

问题是,Goal类型看起来像是它自己的实体,即使是新游戏,它也将保留最后递增的id。

所以我想为每个新游戏重置ID顺序。

1 个答案:

答案 0 :(得分:1)

使用@id注释无法实现您的要求。 pyramida模型中的每种类型都必须具有唯一的ID,以标识数据库中的对象。如果使用的基础数据库是MongoDB,则将有一个目标集合,其中包含文档,每个文档代表由ID标识的单个目标。如果使用的基础数据库是MySQL / PostgreSQL,则目标将存储在目标表中,每一行代表一个单独的目标。

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

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

我的建议是在目标类型中简单地添加一个“ numberInGame”字段,然后在创建目标时将其填充(例如,考虑Game.type中的Goals.length)。

希望有助于弄清id字段唯一性约束。