我正在尝试使用Sequelize通过带有where
子句的查询来查找列中所有不同的字段。我已经搜索了Sequelize文档,并尝试了许多不同的方法,但是还没有找到正确的语法。
这是我当前的语法草案:
var searchResults = connectors.cars.findAll({
attributes: [
connectors.Sequelize.options.distinct
],
where: {
condition: connectors.Sequelize.where(connectors.Sequelize.fn('LOWER', connectors.Sequelize.col('mfgr')), 'LIKE', '%' + searchString + '%')
}
});
在options.distinct
子句中使用where
的正确方法是什么?
注意:已编辑,删除了注释中要求的一堆额外的代码,但回想起来,这些代码可能使问题变得难以理解。
答案 0 :(得分:0)
更多的是评论,但是这段代码是怎么回事?
}).then((searchResults) => searchResults.map((item) => item.dataValues));
debugger;
return searchResults; <== ERROR IS THROWN HERE
1)map()的目的地是什么? 2)返回结果是否会在返回结果的之前,因为它不在.then()块中?应该不是这样的吗?
}).then((searchResults) => {
var new_results = searchResults.map((item) => item.dataValues));
debugger;
return new_results;
}
我想念什么吗?
答案 1 :(得分:0)
我得到的印象是,在原始sql中很难做到这一点,更不用说Sequelize了。我发现了an answer that uses raw sql here:
const myQuery = "WITH cte AS\n" +
"( SELECT id, mfgr, ROW_NUMBER() OVER (PARTITION BY mfgr ORDER BY mfgr DESC) AS rn\n" +
" FROM cars\n" +
" WHERE LOWER(mfgr) like '%" + searchString + "%'\n" +
")\n" +
"SELECT *\n" +
"FROM cte\n" +
"WHERE rn = 1";
let searchResults = connectors.db.query(myQuery);