簡體   English   中英

如何使 Typeorm QueryBuilder 在 AND 運算符中為 AND 和 OR 工作?

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

嗨,我已經編寫了以下 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,
          })
      })
    }

但它會導致忽略 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

誰能幫我把上面的代碼弄好!!!

我重構代碼如下

 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,
            })
        })
      )

我跟着TypeORM 找到條件 AND OR 鏈接及其工作方式就像一個魅力

我認為這里必須使用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