我是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;
};
答案 0 :(得分:0)
问题在于
order: [[ sequelize.models.orders, 'createdAt' ]]
尝试按关联的模型sequelize.models.orders的'createdAt'列排序。既然你写了
sequelize.models.orders
.findAll({
尝试通过关联的模型sequelize.models.orders
进行排序,您尝试将模型本身作为关联引用。这不起作用,因为您在订单和订单之间创建了关联,但在订单和订单之间没有。
您正在寻找的代码可能只是
order: [['createdAt', 'ASC' ]]
按您应用findAll()
的模型排序。所以它按orders.createdAt
订购。