schema - Graphql:如何在解析另一种类型时定义一个类型以使用特定实例?
问题描述
我有一个类型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
}
}
解决方案
将字段添加到仅在特定上下文中填充的类型通常是不好的做法。您可以将 a 添加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
字段 forUser
并且Book
只是Checkouts
通过User
或Book
id 获取。上的user
andbook
字段Checkout
只查询User
or Book
by id。
推荐阅读
- javascript - 在这个 ES6 示例中,“静态”是什么意思?
- python - 如何从单词列表中选择python中的随机单词
- c# - 与剃须刀页面相比,.net core 2.1 mvc 中的 csvhelper 工作方式是否不同?
- vba - 您将如何单击带有 Visual Basic 的“我不是机器人”复选框?
- sql - 在使用使用 Unix 时间戳的自定义 SQL 查询参数时,我可以使用日历日期选择器吗?
- parse-platform - 解析云函数响应错误
- amazon-web-services - 将不同的排序键响应映射到 Appsync 架构值
- multithreading - Rust 官方教程带模拟测试的多线程 Web 服务器 - 空请求
- ios - 制作 AdMob 横幅广告无法在 iOS 上加载
- python - 在 TensorFlow 模型中重用经过训练的权重,无需重新初始化