TypeORM如何在where中仅当值存在且非空串时添加查询条件?
TypeORM动态WHERE条件实现方法
以下三种方案都可以满足仅当company参数存在且非空时,才将对应条件加入WHERE子句的需求:
- 方案1:手动构造where对象
先定义包含固定条件的基础对象,再判断参数符合要求时动态追加属性:
// 先初始化固定查询条件 const whereConfig = { firstName: "John" }; // 仅当company存在且非空(可按需加trim判断过滤全空格场景)时追加条件 if (params.company?.trim()) { whereConfig.company = params.company; } userRepository.find({ where: whereConfig });
- 方案2:利用TypeORM自动过滤undefined属性的特性
TypeORM解析where配置时,会自动忽略值为undefined的字段,不会生成对应的SQL条件,写法更简洁:
userRepository.find({ where: { firstName: "John", // 不符合条件时赋值为undefined,TypeORM会自动跳过该字段 company: params.company?.trim() ? params.company : undefined } });
注意:只有值为
undefined时才会被自动过滤,传空字符串、null都会生成对应的查询条件,不要给动态参数设置空字符串默认值。
- 方案3:使用QueryBuilder实现复杂动态条件
如果需要扩展多表关联、范围查询、多条件组合等复杂逻辑,推荐用QueryBuilder实现,灵活性更高:
const query = userRepository.createQueryBuilder('user') .where('user.firstName = :firstName', { firstName: 'John' }); if (params.company?.trim()) { query.andWhere('user.company = :company', { company: params.company }); } const result = await query.getMany();
内容的提问来源于stack exchange,提问作者user842225
相关产品推荐
相关产品推荐

