Sequelize: заказ внутри ассоциации - PullRequest
0 голосов
/ 13 мая 2019

МОДЕЛЬ

product.js

module.exports = function(sequelize, DataTypes) {
    var Product = sequelize.define(
        "Product",
        {
            id: {
                type: DataTypes.INTEGER(10).UNSIGNED,
                allowNull: false,
                primaryKey: true,
                autoIncrement: true,
            },
            title: {
                type: DataTypes.STRING(80),
                allowNull: true,
            },
        },
        {
            tableName: "product",
        },
    );

    Product.associate = function(models) {
        Product.hasMany(models.ProductPrice, { foreignKey: "product_id" });
    };
    return Product;
};

продакт-price.js

module.exports = function(sequelize, DataTypes) {
    var ProductPrice = sequelize.define(
        "ProductPrice",
        {
            id: {
                type: DataTypes.INTEGER(10).UNSIGNED,
                allowNull: false,
                primaryKey: true,
            },
            product_id: {
                type: DataTypes.INTEGER(10).UNSIGNED,
                allowNull: false,
                primaryKey: true,
            },
            price: {
                type: DataTypes.INTEGER(11),
                allowNull: true,
            }
        },
        {
            tableName: "product_price",
        },
    );
    ProductPrice.associate = function(models) {
        ProductPrice.belongsTo(models.Product, { foreignKey: "product_id" });
    };
    return ProductPrice;
};

Я пытаюсь получить последнюю цену из таблицы ProductPrice, используя два вида заказа.

  1. Порядок сопоставления возвращенных цен на продукт (один продукт have many цены) - сортировка по убыванию В id для получения последней цены, с limit:1.
  2. Затем повторный заказ нескольких товаров по цене Я пытаюсь запросить самую последнюю цену и затем заказать несколько продуктов в порядке возрастания или убывания.

Код, выдающий ошибку

models.Product.findAndCountAll({
  //THIS LINE PRODUCES ERROR
  order: [[models.ProductPrice, "price", "DESC"]],
  include: [
    //BRINGS THE CORRECT LATEST PRICE
    { model: models.ProductPrice, order: [["id", "DESC"]], limit:1 },
  ]
})
  .then(data=>{
    res.json({data.rows})
  }

Error

SequelizeDatabaseError: Неизвестный столбец «ProductPrices.price» в порядке пункт '

Примечание: игнорируйте, что я использую findAndCountAll - разве в этом проблема?

1 Ответ

0 голосов
/ 13 мая 2019

Я думаю, вы должны использовать порядок после включения, например,

models.Product.findAndCountAll({
  include: [
     //BRINGS THE CORRECT LATEST PRICE
     { model: models.ProductPrice, order: [["id", "DESC"]], limit:1 },
  ]   
  //THIS LINE PRODUCES ERROR
  order: [models.ProductPrice, "price", "DESC"],
})
.then(data=>{
    res.json({data.rows})
}

для получения дополнительной информации, загруженные модели ,

edit строк скопировано с официального документа

Company.findAll({ include: [ Division ], order: [ [ Division, 'name' ] ] });
...