首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >TypeORM,如果提供了值并且不是空字符串,则在`where`中添加条件

TypeORM,如果提供了值并且不是空字符串,则在`where`中添加条件
EN

Stack Overflow用户
提问于 2021-11-22 12:17:25
回答 3查看 264关注 0票数 1

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

代码语言:javascript
代码运行次数:0
运行
复制
userRepository.find({ where: { firstName: "John" } });

它执行查询:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT * FROM "user"
WHERE "firstName" = 'John'

但现在我需要在"where“条件中添加另一个字段,只有在出现值的情况下。例如,我还想检查SQL "where“条件中的company,但仅当出现company值时才检查。

我尝试了一下,我想知道我是否可以通过给出一个默认的空字符串'' 来执行以下操作

代码语言:javascript
代码运行次数:0
运行
复制
const company = params.company ? params.company : '';

userRepository.find({ where: { firstName: "John", company: company } });

但是它仍然会在最终的SQL查询中添加"company"='',这是不好的。我想知道在TypeORM中有没有一个现有的函数,如果提供了值而不是空字符串,那么它可以动态地决定只在where中添加更多的条件?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-11-22 13:21:34

你可以对它使用销毁。例如:

代码语言:javascript
代码运行次数:0
运行
复制
userRepository.find({
   where: {
      firstName: "John",
      ...(params?.company && { company: params.company }),
   }
});

因此,如果params.companyundefined (或空字符串),则

代码语言:javascript
代码运行次数:0
运行
复制
...(undefined && { company: undefined })

返回undefined,对于销毁,它就像...{}一样返回给你。

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

代码语言:javascript
代码运行次数:0
运行
复制
...('company' && { company: 'company' })

返回...{company: 'company'}并为你的where析构它。

示例:

代码语言:javascript
代码运行次数:0
运行
复制
const companyTestWithValue = 'company';
const companyTestWithoutValue = '';

const whereWithValue = {
  firstName: 'John',
  ...(companyTestWithValue && { company: companyTestWithValue }),
};

const whereWithoutValue = {
  firstName: 'John',
  ...(companyTestWithoutValue && { company: companyTestWithoutValue }),
};

console.log('whereWithValue:', whereWithValue);
console.log('whereWithoutValue:', whereWithoutValue);

票数 2
EN

Stack Overflow用户

发布于 2021-11-22 13:06:10

我不认为会有一个很好的解决方案。您最好的选择可能就是使用if - else语句。TypeOrm将使用传递给它的任何内容创建一条语句。我建议你这样做:

代码语言:javascript
代码运行次数:0
运行
复制
      if(params.company){
        userRepository.find({ where: { firstName: "John", company: company } });
      } else{
        userRepository.find({ where: { firstName: "John" } });
      }
票数 0
EN

Stack Overflow用户

发布于 2021-11-22 13:15:59

您可以动态创建查找条件,例如:

代码语言:javascript
代码运行次数:0
运行
复制
const condition = { where: { firstName: "John" } };

if (params.company) {
    condition.where = {
        ...condition.where,
        company: params.company
    }
}

const user = userRepository.find(condition);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70065624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档