简体   繁体   English

如何使 Typeorm QueryBuilder 在 AND 运算符中为 AND 和 OR 工作?

[英]How to make Typeorm QueryBuilder work for AND and OR inside AND operators?

Hi I have written the following Typeform Querybuilder code...嗨,我已经编写了以下 Typeform Querybuilder 代码...

queryBuilder.andWhere('tdm.type =:type', { type: filters.type })
    queryBuilder.andWhere('tdm.form =:form', { form: filters.formId })

    if (filters.orLeadId && filters.orSupportId) {
      queryBuilder.andWhere(subQb => {
        subQb.where('tdm.leadId = :lead', { lead: filters.orLeadId }),
          subQb.orWhere('tdm.supportId = :support', {
            support: filters.orSupportId,
          })
      })
    }

But it results in neglecting the andWhere Operators and results in the following query但它会导致忽略 andWhere 运算符并导致以下查询

SELECT "tdm"."id" AS "tdm_id", "tdm"."form_id" AS "tdm_form_id" FROM "tdm" "tdm" WHERE "tdm"."lead_id" = $1 OR "tdm"."support_id" = $2

Can anyone help me to get the above code right please!!!谁能帮我把上面的代码弄好!!!

I refactored the code as follows我重构代码如下

 if (filters.orLeadId && filters.orSupportId) {
      queryBuilder.andWhere(
        new Brackets(subQb => {
          subQb
            .where('tdm.leadId = :lead', { lead: filters.orLeadId })
            .orWhere('tdm.supportId = :support', {
              support: filters.orSupportId,
            })
        })
      )

I followed TypeORM find where conditions AND OR chaining and its working like a charm我跟着TypeORM 找到条件 AND OR 链接及其工作方式就像一个魅力

I think new Brackets will have to be used here so the clause containing the two conditions to be OR'ed are inside the brackets after AND as it would be when writing in plain SQL我认为这里必须使用new Brackets ,因此包含两个要进行或运算的条件的子句位于AND之后的括号内,就像用普通 SQL 编写时一样

queryBuilder
  .andWhere('tdm.type =:type', { type: filters.type })
  .andWhere('tdm.form =:form', { form: filters.formId })

  if (filters.orLeadId && filters.orSupportId) {
    queryBuilder.andWhere(
      new Brackets(subQb => {
        subQb
          .where('tdm.leadId = :lead', { lead: filters.orLeadId })
          .orWhere('tdm.supportId = :support', { support: filters.orSupportId })
      })
    )
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM