Sequelize:在关联中排序

Posted

技术标签:

【中文标题】Sequelize:在关联中排序【英文标题】:Sequelize: Ordering inside association 【发布时间】:2019-05-13 00:56:55 【问题描述】:

模型

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;
;

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 表中获取最新价格。

    产品相关返回价格的排序(单个产品have many 价格) - 在id 上按降序排序以获取最新价格,limit:1。 然后按价格重新订购多个产品 我正在尝试查询最近的价格,然后按升序或降序订购多个产品。

产生错误的代码

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)
  

错误

SequelizeDatabaseError:“订单”中的未知列“ProductPrices.price” 子句'

注意:忽略我正在使用findAndCountAll - 除非这是问题所在?

【问题讨论】:

请添加您的ProductProductPrice 模型定义 【参考方案1】:

我认为你应该在包含之后使用 order,像这样

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)

更多参考,eagerly-loaded-models,

编辑 从官方文档复制的行

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

【讨论】:

如果这行得通,那就太愚蠢了。尽管如此,查询没有变化。 只需访问我给出的官方文档的链接,为了在关联模型上工作,您必须首先包含该关联..

以上是关于Sequelize:在关联中排序的主要内容,如果未能解决你的问题,请参考以下文章

按关联模型排序时,Sequelize 抛出错误“无法找到模型 x 的有效关联”

Sequelize - 如何提取具有 1 个关联记录的记录并按关联记录属性排序

Sequelize:急切加载和排序(在父表上)

如何在sequelize中对嵌套模型中的列进行排序?

在 Sequelize 中限制延迟加载的关联

Sequelize 模型关联不会创建新列