Sequelize 请求未正确排序记录
Sequelize request not ordering records correctly
我正在使用以下 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 个查询。
如果数据量很小,我觉得这两个选项都可以,所以这只是一个偏好。
我正在使用以下 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 个查询。
如果数据量很小,我觉得这两个选项都可以,所以这只是一个偏好。