我有两个表 - Customer
和 Orders
它们是一对多的关系。我正在使用 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;
但是,我怀疑它不可能是正式且正确的,因为我必须手动添加双引号。在上面的错误语法示例中,表名和字段名周围的引号会自动添加。
我在 PostgreSQL 中使用 Sequelize 2.0.0-rc3。
最佳答案
我刚刚找到了正确的用法。模型对象必须在 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;
关于javascript - 使用 Sequelize.js findAll 对连接表中的字段进行排序的正式且正确的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27600450/