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

Typeorm MySQL中QueryBuilder的LIKE查询报错求助

解决TypeORM QueryBuilder MySQL模糊查询的EntityPropertyNotFoundError问题

问题原因

你遇到的EntityPropertyNotFoundError: Property "search" was not found in "User"错误,是因为TypeORM的QueryBuilder在解析手写SQL字符串条件时,误将:search识别为User实体的属性字段,而非查询参数。

可行解决方案

方案1:使用TypeORM内置的参数绑定写法(推荐)

显式拆分条件字符串与参数绑定,让QueryBuilder明确识别参数:

const users = await this.userRepository
  .createQueryBuilder()
  .select(['firstName', 'lastName'])
  .where('LOWER(firstName) LIKE :search')
  .setParameter('search', `%${query.search.toLowerCase()}%`)
  .getRawMany();

方案2:用TypeORM的Like操作符构建查询

借助TypeORM提供的Like函数,避免手写SQL字符串的解析问题:

import { Like } from "typeorm";

const searchKeyword = `%${query.search.toLowerCase()}%`;
const users = await this.userRepository
  .createQueryBuilder()
  .select(['firstName', 'lastName'])
  .where({ firstName: Like(searchKeyword) })
  .getRawMany();

方案3:给参数名添加反引号标记

如果坚持在同一行写条件与参数,可给参数名包裹反引号,避免被误解析为实体属性:

const users = await this.userRepository
  .createQueryBuilder()
  .select(['firstName', 'lastName'])
  .where('LOWER(firstName) LIKE `:search`', {
    search: `%${query.search.toLowerCase()}%`,
  })
  .getRawMany();

验证提示

测试时确保query.search不为空值,避免生成%%这类无意义的模糊查询条件,同时确认firstName确实是User实体中映射到数据库的字段名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:14:57