postgresql Prisma客户端通过模式对连接表中是否存在值进行选择查询

mxg2im7a  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(1)|浏览(194)

在我的示例中,我有一个将奖金加入赌场的架构。查询对数据很有效,但我无法通过查询本身进行过滤。我使用的where子句看起来是正确的,但我得到一个错误,声明Object literal只能指定已知属性,并且“nodeposit”不存在于类型中。但我可以查询该数据。

const data = await prisma.casino_p_casinos.findMany({
where: { 
  approved: 1, 
  rogue: 0,
  bonuses: {
    nodeposit: { gt : 0 },
  }
 },
select: {
  id: true,
  clean_name: true,
  casino: true,
  button: true,
  bonuses: {
    where: {
      nodeposit: { gt: 0 },
    },
  },
},

take: 14,

});
如果我删除WHERE子句中的奖金pard,查询将按预期工作,但我希望获取每个赌场的所有奖金,但前提是奖金包含nodeposit值。
这就是我要用的。

const data = await prisma.casino_p_casinos.findMany({
where: { 
  approved: 1, 
  rogue: 0,
  bonuses: {
    nodeposit: { gt : 0 },
  },
 },
select: {
  id: true,
  clean_name: true,
  casino: true,
  button: true,
  bonuses: true,
},

take: 14,

});
计划:

model casino_p_casinos {
  id            Int                             @id @default(autoincrement())
  casino        String?
  type          String?
  url           String?
  bonuses       casino_p_bonus[]

model casino_p_bonus {
  id               Int              @id @default(autoincrement())
  parent           Int
  game             String?
  freespins        Int?
  freeplay         String?
  nodeposit        Int?
  deposit          Int?
 
  casino_p_casinos casino_p_casinos @relation(fields: [parent], references: [id])
}
6g8kf2rb

6g8kf2rb1#

您有一个一对多关系,因此当您添加where子句时,您就多了一个具有someeverynone的层,如

const data = await prisma.casino_p_casinos.findMany({
      where: {
        approved: 1,
        rogue: 0,
        bonuses: {
          // 'some' can be replaced by 'every' or 'none' here
          some: {
            nodeposit: { gt: 0 }
          }
        }
      },
      select: {
        id: true,
        clean_name: true,
        casino: true,
        button: true,
        bonuses: true
      },
      take: 14
    })

此查询将过滤casinos,其中一些nodeposit大于0,并返回所有奖金,甚至那些等于0的奖金。
然后,如果您只希望bonusesnodeposit在赌场中大于0,您应该这样做:

const data = await prisma.casino_p_casinos.findMany({
      where: {
        approved: 1,
        rogue: 0,
        bonuses: {
          // 'some' can be replaced by 'every' or 'none' here
          some: {
            nodeposit: { gt: 0 }
          }
        }
      },
      select: {
        id: true,
        clean_name: true,
        casino: true,
        button: true,
        bonuses: {
          where: {
            nodeposit: { gt: 0 }
          }
        }
      },
      take: 14
    })

相关问题