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

TypeORM中如何实现带OR分组的WHERE LIKE查询?

解决TypeORM中AND嵌套OR的查询问题

你当前的代码有两个核心问题:一是where数组的逻辑不符合需求,二是存在拼写错误。TypeORM里where数组的每个对象是OR关系,导致生成的SQL变成area = ? OR name LIKE ? OR address LIKE ?,和你需要的area = ? AND (name LIKE ? OR address LIKE ?)完全不符;另外代码里getReporsitory应为getRepository,connetion应为connection。

下面给出两种正确实现方式:

方式一:使用find方法的嵌套条件

const { DataSource, Equal, Like } = require("typeorm");

// 注意区分area参数和搜索关键词,避免变量混淆
const areaParam = 2;
const searchParam = "你的搜索内容";

const data = await connection.getRepository("Users").find({
  select: ["id", "name", "address", "sex", "birthday", "area"], // 对应原SQL指定查询字段
  where: {
    area: Equal(areaParam), // TypeORM 0.3.x版本可直接写area: areaParam,Equal可省略
    // 嵌套OR条件(部分数据库需用or替代$or,比如PostgreSQL)
    $or: [
      { name: Like(`%${searchParam}%`) },
      { address: Like(`%${searchParam}%`) }
    ]
  }
});

方式二:使用QueryBuilder(推荐,复杂条件更直观)

QueryBuilder写法能完全匹配你要的SQL结构,可读性更强:

const { DataSource } = require("typeorm");

const areaParam = 2;
const searchParam = "你的搜索内容";

const data = await connection.getRepository("Users")
  .createQueryBuilder("user")
  .select(["user.id", "user.name", "user.address", "user.sex", "user.birthday", "user.area"])
  .where("user.area = :area", { area: areaParam })
  .andWhere("user.name LIKE :search OR user.address LIKE :search", { search: `%${searchParam}%` })
  .getMany();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:15:47