[英]Using dynamic search parameters with Sequelize.js
我正試圖在他們的網站上關注Sequelize教程 。
我已達到以下代碼行。
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);
}
});
它不再返回任何結果。 我怎樣才能解決這個問題?
現在在Sequelize你可以嘗試這個
{ where: { columnName: { $like: '%awe%' } } }
有關更新的語法,請參見http://docs.sequelizejs.com/en/latest/docs/querying/#operators
我想你會這樣做:
where: ["title like ?", '%' + 'awe' + '%']
因此,如果您使用實際變量進行此操作,則使用:
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);
}
});
我會這樣做:
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
請試試這段代碼
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
{ where: { columnName: { [Op.like]: '%awe%' } } }
利用Sequelize.Utils.format函數可能更清晰
對於where子句, ["columnName like ?", '%' + x + '%']
的接受答案在Sequelize 4.41.1中導致此錯誤:“在where
對象已被刪除的情況where
支持文字替換”。
假設: modelName.findAll({ where : { columnName : { searchCriteria } } });
使用[Op.like]: '%awe%'
或$like: '%awe%' }
作為searchCriteria(其中'awe'是你想在columnName中找到的值)都會導致帶有LIKE LIKE子句的LIKE '\\"%awe%\\"'
。 注意額外的引號。 [Op.like]和$ like是彼此的別名,既不回答OP的問題,因為它們不允許動態搜索參數。
使用[Op.like] : `%${parameter}%`
作為searchCriteria(其中'parameter'是你想在columnName中找到它的值的參數)導致SQL的LIKE子句為LIKE '\\"%findMe\\"'
當參數='findMe'時。 再次注意額外的引號。 沒有結果。
另一個StackOverflow帖子中的答案建議使用[Op.like]: [`%${parameter}%`]
作為searchCriteria(其中'parameter'是要在columnName中找到其值的參數)。 注意方括號! 當參數='findMe'時,這導致SQL具有LIKE '[\\"%findMe%\\"]'
的LIKE子句。 再次注意額外的引號和方括號。 沒有結果。
對我來說,解決方案是使用原始查詢: Sequelize.query('SELECT * FROM tableName WHERE columnName LIKE "%searchCriteria%"');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.