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

Sequelize多表关联如何通过findAll实现产品名或标签名模糊匹配查询

实现方案

你需要把产品名匹配和关联标签名匹配的条件放到主查询的Op.or逻辑中,同时配合关联查询的参数调整即可实现需求,示例代码如下:
首先确保你已经引入Sequelize的操作符:

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

查询逻辑:

// 替换为实际传入的搜索关键词
const searchKey = '你的搜索关键词';

const result = await db.products.findAll({
  where: {
    [Op.or]: [
      // 条件1:产品名模糊匹配
      { product_name: { [Op.like]: `%${searchKey}%` } },
      // 条件2:关联标签名模糊匹配,用$关联别名.字段$引用关联表字段
      { '$tags.tag_name$': { [Op.like]: `%${searchKey}%` } }
    ]
  },
  include: [
    {
      model: db.tag_names,
      as: 'tags',
      required: false // 不强制要求产品存在关联标签,避免产品名匹配但无标签的产品被过滤
    }
  ],
  distinct: true // 去重,避免单产品多匹配标签时返回重复记录
});

关键说明

  • $tags.tag_name$是Sequelize提供的跨表字段引用语法,tags就是你定义关联时设置的as别名
  • 如果使用PostgreSQL数据库需要大小写不敏感匹配,可将Op.like替换为Op.iLike
  • 如果不需要返回关联的标签信息,可以在include中加attributes: []不返回标签字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:48:04