You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Sequelize中拼接两个字段并检查新字段是否包含子字符串?

解决Sequelize拼接字段并模糊匹配的问题

问题分析

你的代码无法正常运行,大概率是这几个原因:

  • 未正确导入Sequelize的操作符Op,导致[op.iLike]无法被识别
  • 手动包裹Promise属于冗余操作,async函数本身会自动返回Promise
  • 条件结构的写法存在逻辑或语法问题

修正方案

方案1:使用fn和where的标准写法(推荐)

先确保导入Op,再优化函数结构:

const { Op } = require('sequelize'); // ES模块请用 import { Op } from 'sequelize';

const getUserByText = async (text) => {
  return await db.User.findAll({
    where: db.User.where(
      db.User.fn('CONCAT', db.User.col('first_name'), ' ', db.User.col('last_name')),
      { [Op.iLike]: `%${text}%` }
    )
  });
};

方案2:用literal直接编写SQL表达式

如果觉得fn的写法不够直观,可以用literal直接定义拼接逻辑,同时通过replacements避免SQL注入:

const { Op } = require('sequelize');

const getUserByText = async (text) => {
  return await db.User.findAll({
    where: db.User.literal(`CONCAT(first_name, ' ', last_name) ILIKE :searchText`),
    replacements: {
      searchText: `%${text}%`
    }
  });
};

关键注意点

  • 操作符必须是大写开头的Op.iLike,而非小写的op.iLike,且必须正确导入Op对象
  • 不要手动用new Promise包裹async函数,async函数本身就会返回Promise,直接return查询结果即可
  • 优先使用replacements传递用户输入,不要直接做字符串拼接,避免SQL注入风险

内容的提问来源于stack exchange,提问作者Zombani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:54:14