TypeORM,如果存在值且非空字符串,则在“where”中添加条件

use*_*225 6 node.js typeorm nestjs node.js-typeorm

我在我的node.js 项目中使用TypeOrm。我知道从数据库中查找记录我可以这样做:

userRepository.find({ where: { firstName: "John" } });
Run Code Online (Sandbox Code Playgroud)

它执行查询:

SELECT * FROM "user"
WHERE "firstName" = 'John'
Run Code Online (Sandbox Code Playgroud)

但现在,仅当存在该值时,我才需要在“where”条件中添加另一个归档检查。例如,我还想检查companySQL“where”条件,但前提是company存在值。

我尝试了以下操作,我想知道我可以通过给出默认的空字符串(''如果company不存在)然后将其传递给find函数来执行以下操作where吗?

const company = params.company ? params.company : '';

userRepository.find({ where: { firstName: "John", company: company } });
Run Code Online (Sandbox Code Playgroud)

但它仍然会添加"company"=''到最终的 SQL 查询中,这是不好的。我想知道 TypeORM 中是否有一个现有函数可以动态决定仅在where存在值而不是空字符串时添加更多条件?

PZB*_*ird 14

你可以使用破坏来达到目的。喜欢:

userRepository.find({
   where: {
      firstName: "John",
      ...(params?.company && { company: params.company }),
   }
});
Run Code Online (Sandbox Code Playgroud)

所以,如果params.companyundefined(或空字符串)那么

...(undefined && { company: undefined })
Run Code Online (Sandbox Code Playgroud)

返回undefined并为你带来毁灭...{}

如果params.company包含一些值,则

...('company' && { company: 'company' })
Run Code Online (Sandbox Code Playgroud)

返回...{company: 'company'}并在您所在的位置销毁它。

例子:

userRepository.find({
   where: {
      firstName: "John",
      ...(params?.company && { company: params.company }),
   }
});
Run Code Online (Sandbox Code Playgroud)