使用Sequelize.js findAll对连接表中的字段进行排序的正式和正确的语法

Formal and correct syntax to sort a field from the joined table using Sequelize.js findAll

本文关键字:排序 语法 字段 findAll js 连接 使用 Sequelize      更新时间:2023-09-26

我有两个表 - CustomerOrders 处于一对多关系。我正在使用findAll((查询两个表,并尝试按降序对Orders.orderDate进行排序。以下都是错误的和结果查询错误。

语法错误 (1(

Customer.findAll({
    order: [["orderDate", "DESC"]],
    include: [Order]
}, {
    raw: true
}).then(function(data) {
    console.log(data);
}); 
// Generated order by clause
// ORDER BY "Customer"."orderDate" DESC;

语法错误 (2(

Customer.findAll({
    order: [["Orders.orderDate", "DESC"]],
    include: [Order]
}, {
    raw: true
}).then(function(data) {
    console.log(data);
}); 
// Generated order by clause
// ORDER BY "Customer"."Orders"."orderDate" DESC;

语法错误 (3(

Customer.findAll({
    order: ["Orders.orderDate", "DESC"],
    include: [Order]
}, {
    raw: true
}).then(function(data) {
    console.log(data);
});
// Generated order by clause
// ORDER BY "Orders"."orderDate", "DESC";

语法错误 (4(

Customer.findAll({
    order: ["Orders.orderDate DESC"],
    include: [Order]
}, {
    raw: true
}).then(function(data) {
    console.log(data);
});
// Generated order by clause
// ORDER BY "Orders"."orderDate DESC";

以下是我让它工作的一个:

Customer.findAll({
    order: '"Orders"."orderDate" DESC',
    include: [Order]
}, {
    raw: true
}).then(function(data) {
    console.log(data);
});
// Generated order by clause
// ORDER BY "Orders"."orderDate" DESC;

但是,我怀疑它不可能是正式且正确的,因为我必须手动添加双引号。在上述错误的语法示例中,表名和字段名称周围自动添加引号。

我正在使用Sequelize 2.0.0-rc3和PostgreSQL。

我刚刚找到了一个正确的用法。模型对象必须在order选项的数组中给出。

Customer.findAll({
    order: [[ Order, "orderdate", "DESC" ]],
    include: [Order]
}, {
    raw: true
}).then(function(data) {
    console.log(data);
});
// Generated order by clause
// ORDER BY "Orders"."orderDate" DESC;