我有这个MySQL查询来计算今年客户订单的数量:
SELECT COUNT(order_id) FROM orders where year(order_datetime) = year(curdate()) and customer_id = 51;
我在尝试转换相同的查询以使用sequelize时遇到了一些困难。使用此代码,我为所有用户返回0:
db.orders.findAll({
where: {
order_id: orderID,
attempt_datetime: {
$like: '%' + 2016 + '%'
}
},
attributes: [[sequelize.fn('COUNT', sequelize.col('order_id')), 'ordersThisYear']]
}).then(function (result) {
console.log('THIS YEARs ORDERS', result);
}, function (e) {
console.log(e);
});
我在webstorm中也遇到以下错误:
弃用警告:时刻构建回落到日期。这是不鼓励的,将在即将发布的主要版本中删除。 请参阅https://github.com/moment/moment/issues / 1407了解更多信息。参数:[object Object]
任何帮助表示赞赏!
答案 0 :(得分:3)
Sequelize使用时刻操纵日期。您可能将attempt_datetime
定义为日期字段,以便将%2016%
解析为2016-01-01 00:00:00
日期。你应该使用$ gte / $ lt运算符而不是$ like来处理日期范围,你可以使用momentjs:
var moment = require('moment');
db.orders.findAll({
where: {
order_id: orderID,
attempt_datetime: {
$gte: moment(2016, 'YYYY').toDate(),
$lt: moment(2017, 'YYYY').toDate()
}
},
attributes: [
[sequelize.fn('COUNT', sequelize.col('order_id')), 'ordersThisYear']
]
})
答案 1 :(得分:0)
我仍然无法发表评论所以我必须写一个答案....
回应
谢谢你的工作就像一个魅力我可以问你一些事情。当我得到结果>返回并且答案在结果dataValues对象中时我将返回它。是>返回结果[0] .dataValues [' ordersThisYear']是访问它的唯一方法,或者是>有更短的写作方式
你可以简单地调用result [0] .ordersThisYear