簡體   English   中英

Prisma - 如何使用計數作為關系條件

[英]Prisma - How to use count as a where condition with relation

我將nestjspostgresqlprisma一起使用。 我有 2 個相關的表,如果第二個表中的記錄數小於 - 比方說 - 3,我想創建一個 where 子句以獲取記錄。更多細節;

這是我的架構

model User {
  id                      String            @id
  someOtherFields         String
  outgoingPlayMateRequest PlayMateRequest[] @relation("userId")
  incomingPlayMateRequest PlayMateRequest[] @relation("targetId")
}

model PlayMateRequest {
  id               Int      @id
  requestingUser   User     @relation(name: "userId", fields: [requestingUserId], references: [id], onDelete: Cascade)
  targetUser       User     @relation(name: "targetId", fields: [targetUserId], references: [id], onDelete: Cascade)
  requestingUserId String
  targetUserId     String
  someOtherFields  String
  response         String   //accept-reject-block
}

這是我的帶有 where 子句的代碼(我通過刪除不相關的部分來簡化它)

const userId = 'testUser';
return await this.prismaService.user.findMany({
    where: {
      NOT: {
        id: userId //don't fetch user him/herself
      },
      lang: 'EN',
    }
  });

我想在這里用英文添加的條件是;

不要 select 用戶與incomingPlayMateRequest 關系,如果PlayMateRequest 表中有3 條記錄response = rejectrequestingUser = userId

但是我無論如何都找不到使用count作為 where 的條件。 如我所見,我只能獲得關系計數。 我怎么能用prisma做到這一點?

在 Prisma 中沒有直接的方法來執行這樣的條件,但是您可以使用以下解決方法:

  1. 對過濾條件執行groupBy查詢。
  2. 使用map創建與過濾條件匹配的所有用戶 id 的User.id字段數組。
  3. 執行正常的findMany查詢,但在過濾后的用戶 ID 數組中添加一個額外的notIn條件。

這是整個事情的樣子:

const userId = 'testUser';

// step 1
const dataForFilter = await prisma.playMateRequest.groupBy({
    by: ['targetUserId'],
    where: {
        response: "reject",
        requestingUserId: userId
    },
    having: {
        targetUserId: {
            _count: {
                equals: 3  
            }
        }
    }
})

// step 2
let exclude_users = [userId]
exclude_users = exclude_users.concat(dataForFilter.map(item => item.targetUserId))

let result = await prisma.playMateRequest.user.findMany({
    where: {
        id: {
        notIn: exclude_users
        },
        lang: "en"
    }
    });

我可能誤解了您想要實現的查詢的確切細節,但我認為這應該為您提供一般的查詢結構。 根據需要調整groupBy查詢以匹配您的確切條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM