我正在尝试关注Sequelize tutorial on their website。
我已达到以下代码行。
Project.findAll({where: ["id > ?", 25]}).success(function(projects) {
// projects will be an array of Projects having a greater id than 25
})
如果我稍微调整一下
Project.findAll({where: ["title like '%awe%'"]}).success(function(projects) {
for (var i=0; i<projects.length; i++) {
console.log(projects[i].title + " " + projects[i].description);
}
});
一切正常。但是,当我尝试使搜索参数动态如下
Project.findAll({where: ["title like '%?%'", 'awe']}).success(function(projects) {
for (var i=0; i<projects.length; i++) {
console.log(projects[i].title + " " + projects[i].description);
}
});
它不再返回任何结果。我该如何解决这个问题?
答案 0 :(得分:21)
现在在Sequelize上你可以试试这个
{ where: { columnName: { $like: '%awe%' } } }
请参阅http://docs.sequelizejs.com/en/latest/docs/querying/#operators了解更新语法
答案 1 :(得分:19)
我想你会这样做:
Project.findAll({where: ["title like ?", '%' + 'awe' + '%']}).success(function(projects) {
for (var i=0; i<projects.length; i++) {
console.log(projects[i].title + " " + projects[i].description);
}
});
因此,如果您使用实际变量进行此操作:
Project.findAll({where: ["title like ?", '%' + x + '%']}).success(function(projects) {
for (var i=0; i<projects.length; i++) {
console.log(projects[i].title + " " + projects[i].description);
}
});
答案 2 :(得分:4)
我会这样做:
Project.findAll({where: {title: {like: '%' + x + '%'}, id: {gt: 10}}).success(function(projects) {
for (var i=0; i<projects.length; i++) {
console.log(projects[i].title + " " + projects[i].description);
}
});
通过这种方式,你可以拥有更多的WHERE clausas
答案 3 :(得分:2)
请尝试使用此代码
{ where: { columnName: { [Op.like]: '%awe%' } } }
答案 4 :(得分:0)
利用Sequelize.Utils.format函数
可能更清晰答案 5 :(得分:0)
["columnName like ?", '%' + x + '%']
对where子句的可接受答案导致Sequelize 4.41.1中出现此错误:“ where
对象中对文字替换的支持已被删除。”
假设:modelName.findAll({ where : { columnName : { searchCriteria } } });
使用[Op.like]: '%awe%'
或$like: '%awe%' }
作为searchCriteria(其中“ awe”是要在columnName中找到的值)都导致SQL的LIKE子句为LIKE '\"%awe%\"'
。请注意多余的引号。 [op.like]和$ like是彼此的别名,它们都不回答OP的问题,因为它们不允许动态搜索参数。
使用[Op.like] : `%${parameter}%`
作为searchCriteria(其中,“ parameter”是要在columnName中查找其值的参数),当parameter ='findMe'时,SQL的LIKE子句为LIKE '\"%findMe\"'
。同样,请注意多余的引号。没有结果。
在another StackOverflow post中的答案建议对搜索标准使用[Op.like]: [`%${parameter}%`]
(其中“ parameter”是要在columnName中查找其值的参数)。注意方括号!当参数='findMe'时,SQL的LIKE子句为LIKE '[\"%findMe%\"]'
。再次注意多余的引号和方括号。没有结果。
对我来说,解决方案是使用原始查询:
Sequelize.query('SELECT * FROM tableName WHERE columnName LIKE "%searchCriteria%"');