sequelize.js - Sequelize 请求未正确排序记录
问题描述
我正在使用以下 Sequelize 请求通过预订 ID 获取车辆预订。包括链接的车辆及其照片。
Bookings.findAll({
where: {
id: bookingid,
},
include: [
{
model: db.vehicles,
include: {
model: db.photos,
order: [["photoOrder", "ASC"]],
},
},
],
})
它的工作原理是我得到了正确的数据,但照片不是按 photoOrder 升序排列的。
[
{
"id": 1,
"bookingCost": 123,
"userId": 1,
"vehicleId": 1,
"vehicle": {
"id": 1,
"model": "fiesta",
"photos": [
{
"id": 2,
"photoOrder": 2,
"photoUrl": "https://xxx.jpg",
"vehicleId": 1
},
{
"id": 1,
"photoOrder": 1,
"photoUrl": "https://yyy.jpg",
"vehicleId": 1
}
]
}
}
]
我究竟做错了什么?我的协会是:
db.vehicles.hasMany(db.bookings);
db.bookings.belongsTo(db.vehicles);
db.vehicles.hasMany(db.photos);
db.photos.belongsTo(db.vehicles);
解决方案
order
选项适用于顶层。
你可以做
Bookings.findAll({
where: ...,
include: ...,
order: [[db.vehicles, db.photos, "photoOrder", "ASC"]]
})
================================
更新:
order
选项可以申请include
。但是,要生效,您需要添加separate: true
.
Bookings.findAll({
where: ...,
include: {
model: db.vehicles,
include: {
model: db.photos,
separate: true,
order: [["photoOrder", "ASC"]]
}
}
})
这separate: true
将执行 2 个查询。
order
放入顶层的原始答案将执行1个查询。
如果数据很小,我认为任何一个选项都可以,所以这只是一个偏好。
推荐阅读
- arrays - 要散列的 Perl 数组数字
- c# - 用户无法在 wpf 数据网格上添加空的新行
- nginx - 无论语言如何重定向 URL
- android - Android gradle 在构建时更改文件
- single-sign-on - 来自 IdP 的 mod_auth_mellon 加密返回值
- sql - 为什么我在从时间戳中获取小时数时会得到不同的答案?
- react-native - 使用 Expo 的 react-navigation 标题折叠动画
- amazon-web-services - 无法引导 terraform 脚本
- arrays - Django 查询循环
- javascript - 为什么内联缓存比 v8 中的字典模式更快