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 个查询。

如果数据量很小,我觉得这两个选项都可以,所以这只是一个偏好。