来自 Ruby/Rails 背景,我习惯了这种语法:
Model.all.order('col1 + col2 + col3')
因此,假设 col1、col2 和 col3 是整数,例如,它将按这 3 列的总和对结果进行排序。
有没有类似的方法可以使用 sequelize 进行排序?
来自 Ruby/Rails 背景,我习惯了这种语法:
Model.all.order('col1 + col2 + col3')
因此,假设 col1、col2 和 col3 是整数,例如,它将按这 3 列的总和对结果进行排序。
有没有类似的方法可以使用 sequelize 进行排序?
使用最新的 master(不确定是否已将更改推送到 npm),您可以执行以下操作:
Model.findAll({ order: [[{ raw: 'col1 + col2 + col3 DESC' }]]});
导致
ORDER BY col1 + col2 + col3 DESC
或者你可以这样做:
Model.findAll({ order: [[sequelize.fn('SUM', sequelize.col('col1'), sequelize.col('col2'), sequelize.col('col3')), 'DESC']]});
导致
ORDER BY SUM(`col1`, `col2`, `col3`) DESC
我会推荐第二个版本,它将正确地转义列名。有关更多信息,请参阅http://sequelizejs.com/documentation#models-finders-limit---offset---order---group
order: [
['created_at', 'desc'],
['id', 'desc']
]
或者
order: [
[sequelize.literal('created_at, id'), 'desc']
]
必须在我的模型的 defaultScope 中按 col1+col2 排序,作为答案提供的 SUM 解决方案返回了一个 sequelize 错误function sum(numeric, numeric) does not exists
(或类似的东西)。
我目前的解决方法:
order: [[ 'col1', sequelize.literal('+'), 'col2', 'DESC']]
这将打印出来
ORDER BY "tableName"."col1"+"col2" DESC
只需添加更多间隔列和sequelize.literal('+')
更多列。
如果使用包含/连接并且您需要使用表名调用所有列...我尝试过sequelize.col('col2')
但未添加表名。我想这样的组合'tableName', sequelize.literal('.'), 'columnName'
应该可以工作,但你需要知道你的表名/别名。而且我无法访问我的模型,因为它是在我的用例中定义的。来自文档的{model: 'model', as: 'alias'}
也失败了。