【问题标题】:Prisma : How to query the record based on non unique columnsPrisma:如何根据非唯一列查询记录
【发布时间】:2020-12-03 22:46:39
【问题描述】:

Prima 提供了使用 API 查询数据库中记录的快速方法,这些函数非常适用于唯一列。就像我有如下表成员身份

type Membership {
      id: ID! @id
      memberKey: String! @unique
      member: User! @relation(name: "MemberUser")
      project: Project! @relation(name: "MemberProject")
      access: [Access] @scalarList(strategy: RELATION)
      createdBy: User @relation(name: "MembershipCreator")
      updatedBy: User @relation(name: "MembershipUpdator")
      createdAt: DateTime! @createdAt
      updatedAt: DateTime! @updatedAt
}

type Project {
      id: ID! @id
      initials: String! @unique
      name: String! @unique
      desc: String
      conf: Json
      products: [Product!] @relation(name: "ProjectProducts")  
      tags: [Tag!] @relation(name: "ProjectTags")
      isActive: Boolean @default(value: true)
      createdBy: User @relation(name: "ProjectCreator")
      updatedBy: User @relation(name: "ProjectUpdator")
      createdAt: DateTime! @createdAt
      updatedAt: DateTime! @updatedAt
}

现在如果需要根据id查询上表,我就可以了

 project = await prisma.query.membership({
                where: {
                    project: {
                        id: projectId
                    }
                }
            }, `{ id  }`)

但是,如果我必须基于任何非唯一字段(如 Project.id)进行查询,我无法做到这一点,因为 Prisma 默认只创建唯一字段的函数,在我的情况下,我可以查询 id 和会员密钥。我看到的错误是

错误:变量“$_v0_where”的值无效 { member: { id: “ck57qob5z00f90791d1973nbh”}};字段“成员”未按类型定义 MembershipWhereUniqueInput。你是说 memberKey 吗?

请帮忙

【问题讨论】:

  • 您确定您发布了正确的错误信息吗?在您的错误消息中,它指出未定义字段“成员”,但它应该是字段“项目,如果有的话。

标签: javascript prisma


【解决方案1】:

您可以在数据模型的 Project 类型中添加 member: Member! @relation(name: "MemberProject")member: [Member!]! @relation(name: "MemberProject") 以获取某个项目的所有成员资格。

使用 prisma 客户端 fluent api(不是 prisma 绑定)它可能看起来像这样:

const commentsForPost = await prisma
  .post({ id: 'cjsviilj60g8y0b43bme3x8ib' })
  .comments()

见:

【讨论】:

    【解决方案2】:

    您只能在 unique 字段上使用 prisma.query.membership。 要查询任何字段,您需要在末尾使用prisma.query.membershipss。 不过,这将返回一个列表,因此类似于:

    const [membership] = prisma.query.memberships(...);
    

    将第一个返回的项目放入变量membership

    【讨论】:

      猜你喜欢
      • 2018-04-06
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多