Sequelize:渴望加载和排序(在父表上)

时间:2016-06-13 23:40:55

标签: javascript mysql node.js sequelize.js

我是FeathersJS项目中的Sequelize,在尝试按父表加载关联和排序时遇到问题。如果我只是将 OR 的顺序添加到查询中,那么一切正常,那就是当我同时使用它时我得到了错误:Unhandled rejection Error: 'sales_flat_order' in order / group clause is not valid association

查询:

sequelize.models.orders
    .findAll({
      limit: 10,
      include: [ sequelize.models.items ],
      order: [[ sequelize.models.orders, 'createdAt' ]],
    })
    .then(orders => {
      // Error
    });

订单型号:

const Sequelize = require('sequelize');

module.exports = function(sequelize) {
  const order = sequelize.define('orders', {
    id: { type: Sequelize.INTEGER, primaryKey: true, field: 'entity_id' },
    customerEmail: { type: Sequelize.STRING, field: 'customer_email' },
    customerFirstName: { type: Sequelize.STRING, field: 'customer_firstname' },
    customerLastName: { type: Sequelize.STRING, field: 'customer_lastname' },
    state: { type: Sequelize.STRING },
    grandTotal: { type: Sequelize.FLOAT, field: 'grand_total' },
    createdAt: { type: Sequelize.DATE, field: 'created_at' },
    updatedAt: { type: Sequelize.DATE, field: 'updated_at' },
  }, {
    freezeTableName: true,
    tableName: 'sales_flat_order',
    classMethods: {
      associate(models) {
        order.hasMany(models.items, { foreignKey: 'orderId' });
      }
    }
  });

  return order;
};

物品型号:

const Sequelize = require('sequelize');

module.exports = function(sequelize) {
  const item = sequelize.define('items', {
    id: { type: Sequelize.INTEGER, primaryKey: true, field: 'item_id' },
    orderId: { type: Sequelize.INTEGER, field: 'order_id' },
    productId: { type: Sequelize.INTEGER, field: 'product_id' },
    productType: { type: Sequelize.STRING, field: 'product_type' },
    sku: { type: Sequelize.STRING },
    name: { type: Sequelize.STRING },
    qtyOrdered: { type: Sequelize.INTEGER, field: 'qty_ordered' },
    price: { type: Sequelize.FLOAT },
    createdAt: { type: Sequelize.DATE, field: 'created_at' },
    updatedAt: { type: Sequelize.DATE, field: 'updated_at' },
  }, {
    freezeTableName: true,
    tableName: 'sales_flat_order_item',
    classMethods: {
      associate(models) {
        item.belongsTo(models.orders, { foreignKey: 'orderId' });
      }
    }
  });

  return item;
};

1 个答案:

答案 0 :(得分:0)

问题在于

order: [[ sequelize.models.orders, 'createdAt' ]]

尝试按关联的模型sequelize.models.orders的'createdAt'列排序。既然你写了

sequelize.models.orders
.findAll({

尝试通过关联的模型sequelize.models.orders进行排序,您尝试将模型本身作为关联引用。这不起作用,因为您在订单和订单之间创建了关联,但在订单和订单之间没有。

您正在寻找的代码可能只是

order: [['createdAt', 'ASC' ]]

按您应用findAll()的模型排序。所以它按orders.createdAt订购。