sql - 在 Sequelize 中同时查询两个组合字段

标签 sql node.js sequelize.js

我的应用程序中有一个用于搜索人员姓名的搜索框。候选人的姓名存储为firstName,然后是lastName。当我搜索应用程序时,应用程序输入提交对 ajax 函数的调用,其中有这段代码。

  filters.where = {
    $or: ['firstName', 'lastName', 'email'].map((item) =>
      ({[item]: {[queryClause]: `%${query}%`}}))
  };

  const scope = req.query.list;
  const candidates = await CandidateModel.scope(scope).findAll(filters);

因此,如果我在搜索框中输入“John”,它将找到候选人,如果我输入单词“Smith”,它将找到候选人。

问题是,如果我输入全名“John Smith”,它不会出现,因为查询正在检查“John Smith”是否等于“John”,即名字,或者“John Smith”等于姓氏“Smith”。它不等于其中任何一个。

有没有办法通过 sequalize 中的组合字段进行过滤,以便测试查询是否与组合的名字和姓氏字段相匹配?

最佳答案

使用类似下面的内容以“firstName lastName”的形式按全名进行搜索

Sequelize.where(Sequelize.fn("concat", Sequelize.col("firstName"), ' ', Sequelize.col("lastName")), {
                        $ilike: '%john smith%'
                    })

这样做可以解决名字或姓氏可能有空格的问题。

关于sql - 在 Sequelize 中同时查询两个组合字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36455513/

相关文章:

mysql - 是否可以使用某些查询将记录从一台服务器上的一个数据库表复制到另一台服务器上的另一个数据库表? (两张表完全相同)

mysql - 我应该如何将建议的编辑保存在数据库中

node.js - 无法查询子子文档

mysql - 按时间排序在 MySql 中不起作用

mysql - 根据 If 语句选择自定义列

node.js - 如何用 Mongoose 排除数组类型字段

node.js - 如何从 NodeJS 中的单个 azure 函数向 azure 服务总线和事件发送消息到事件中心总线?

javascript - Sequelize 关联包含返回 null

javascript - 使用 Sequelize 模型 Sequelize Op.notIn

json - Sequelize - 不要用 JSON 响应返回密码