【问题标题】:Using dynamic search parameters with Sequelize.js在 Sequelize.js 中使用动态搜索参数
【发布时间】:2012-03-08 10:30:55
【问题描述】:

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

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

【问题讨论】:

  • 我发现你的问题的措辞有点混乱,所以我编辑了它。希望我理解正确,如果您认为我搞砸了,请随时改回来。

标签: javascript node.js sequelize.js


【解决方案1】:

现在你可以在 Sequelize 上试试这个

{ where: { columnName: { $like: '%awe%' } } }

请参阅http://docs.sequelizejs.com/en/latest/docs/querying/#operators 了解更新的语法

【讨论】:

  • 好简单的答案。新用户的快速注释,标题是您要查找匹配的列的名称。
  • 谢谢@JMM 我修好了 ;)
【解决方案2】:

我想你会这样做:

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);
    }
});

【讨论】:

    【解决方案3】:

    请试试这个代码

    const Sequelize = require('sequelize');
    const Op = Sequelize.Op;
    { where: { columnName: { [Op.like]: '%awe%' } } }
    

    【讨论】:

      【解决方案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 子句

      【讨论】:

        【解决方案5】:

        利用 Sequelize.Utils.format 函数可能更简洁

        【讨论】:

          【解决方案6】:

          ["columnName like ?", '%' + x + '%'] 对 where 子句的接受答案导致 Sequelize 4.41.1 中出现此错误:“对 where 对象中的文字替换的支持已被删除。”

          假设:modelName.findAll({ where : { columnName : { searchCriteria } } });

          使用[Op.like]: '%awe%'$like: '%awe%' } 作为searchCriteria(其中'awe' 是您要在columnName 中查找的值)都会导致SQL 带有LIKE '\"%awe%\"' 的LIKE 子句。注意额外的引号。 [Op.like] 和 $like 是彼此的别名,并且都没有回答 OP 的问题,因为它们不允许动态搜索参数。

          使用[Op.like] : `%${parameter}%` 作为searchCriteria(其中'parameter' 是您要在columnName 中查找其值的参数)导致SQL 的LIKE 子句为LIKE '\"%findMe\"',当parameter='findMe' 时。再次注意额外的引号。没有结果。

          another StackOverflow post 中的答案建议使用 [Op.like]: [`%${parameter}%`] 作为 searchCriteria(其中 'parameter' 是要在 columnName 中查找其值的参数)。注意方括号!这导致当参数 = 'findMe' 时 SQL 的 LIKE 子句为 LIKE '[\"%findMe%\"]'。再次注意额外的引号和方括号。没有结果。

          对我来说,解决方案是使用原始查询: Sequelize.query('SELECT * FROM tableName WHERE columnName LIKE "%searchCriteria%"');

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-05-01
            • 2017-03-20
            • 1970-01-01
            • 2021-04-05
            • 2015-07-06
            • 1970-01-01
            相关资源
            最近更新 更多