在Sequelize.js中使用动态搜索参数

时间:2012-02-17 00:27:07

标签: javascript node.js sequelize.js

我正在尝试关注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);
    }
});

它不再返回任何结果。我该如何解决这个问题?

6 个答案:

答案 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%"');