我有一个User
类型和一个Book
类型,定义如下:
type User {
id: ID!
borrowedBooks: [Book]
}
type Book {
id: ID!
name: String
borrowedBy: [User]
}
现在,我要将用户的评分存储到每本书中。我的问题是:如何定义架构,以便可以查询每本借书的用户等级?我是否可以查询如下所示的评分,如果不能,那么处理这种情况的常用方法是什么?
getUser(id: "xxx"): {
borrowedBooks: {
id
name
rating # <------ get the rating value
}
}
答案 0 :(得分:1)
将字段添加到仅在特定上下文中填充的类型通常是一种不好的做法。您可以将rating
添加到Book
类型,但是只有在获取已借书列表时,您才可以使用一个值来解析它-如果您重新获取其他字段的一本书或一系列图书,rating
字段可能不一定有意义。
您可能想要的是另一种类型(和另一张表,如果我们在谈论底层数据库),则可以将用户与他们借来的书结合在一起。像这样:
type User {
id: ID!
checkouts: [Checkout]
}
type Book {
id: ID!
name: String
checkouts: [Checkout]
}
type Checkout {
user: User
book: Book
rating: Int
lastCheckoutDate: Date
# other fields specific to the checkout itself
}
这使查询返回的结果数据更加嵌套,但同时也使数据更易于建模和推理。这些字段的解析器也可以相对简单一些-checkouts
和User
的{{1}}字段只获取Book
或{{1 }} ID。 Checkouts
上的User
和Book
字段仅通过ID查询user
或book
。