簡體   English   中英

在Sequelize.js中使用動態搜索參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM