Prisma GraphQL API

一些改变

type User {
  id: ID! @id
  email: String @unique
  name: String!
  posts: [Post!]!
}

type Post {
  id: ID! @id
  title: String!
  published: Boolean! @default(value: false)
  author: User @relation(link: INLINE)
}

现在开始所说 Prisma API 是基于以上的数据模型👆

⚠️⚠️⚠️

  • 修改过数据模型之后需要重新部署一下 Prisma API

    $ prisma deploy
    
  • 此外,由于 Prisma Cli 是基于你的数据模型的,因此需要在每次更新数据模型时重新生成它

    $ prisma generate
    

💡你也可以在 Prisma.yml 中添加下面的代码,来确保每次部署后都自动更新 Prisma Cli

hooks:
  post-deploy:
    - prisma generate

操作

  • 现在可以在 index.js 中写入以下代码进行数据的插入👇

    const { prisma } = require('./generated/prisma-client')
    
    async function main() {
      const newUser = await prisma.createUser({
        name: 'Doris',
        email: 'Doris@prisma.io',
        posts: {
          create: [
            {
              title: 'hello~',
            },
            {
              title: 'goodbye~',
            },
          ],
        },
      })
      console.log(`Created new user: ${newUser.name} (ID: ${newUser.id})`)
    
      // const allUsers = await prisma.users()
      // console.log(allUsers)
    
      // const allPosts = await prisma.posts()
      // console.log(allPosts)
    }
    
    main().catch(e => console.error(e))
    
  • 查询关系数据

    可以看到现在的数据模型是有所关联的,使用 Prisma Cli API,可以使用链式方法调用查看(也称为 fluentapi )数据中关联的关系数据 👇

    const { prisma } = require('./generated/prisma-client')
    
    async function main() {
      const postsByUser = await prisma.user({ email: 'bob@prisma.io' }).posts()
      console.log(`All posts by that user: ${JSON.stringify(postsByUser)}`)
    }
    
    main().catch(e => console.error(e))
    

概念

每个 Prisma 服务都公开一个 GraphQL API,其中包含 CRUD 和服务数据模型中定义的类型的实时操作。 此API称为 Prisma API。定义 Prisma API 的类型和操作的 GraphQL schema 称为 Prisma GraphQL schema。 它由 Prisma 自动生成

Prisma GraphQL schema

Prisma 数据库是定义 Prisma API 的数据类型和操作的 GraphQL schema。 它是自动生成的,并为 service 的数据模型中指定的模型指定 CRUD 和实时操作

  • 检索单个节点

    query {
      user(where: {
        email: "Doris@prisma.io"
      }) {
        id
        name
      }
    }
    // or
    query {
      post(where: {
        id: "5e1b07470274390007fd4eab"
      }) {
        id
        title
      }
    }
    
  • 更新单个POST节点的 title:

    mutation {
      updatePost(
        where: {
          id: "5e1b07470274390007fd4eab"
        }
        data: {
          title: "hi~"
        }
      ) {
        id
        title
      }
    }
    
  • 批量修改

    Mutation 的 updateManyPosts 和 deleteManyPosts 提供了一个 where 参数来选择特定节点,并返回一个带有受影响节点数的 count 字段

    将所有 post 的 published 属性改为 true 👇

    mutation {
      updateManyPosts(
        where: {
          id_in: ["5e1b01090274390007fd4ea8", "5e1b07470274390007fd4eab", "5e1b0d540274390007fd4eae","5e1b01090274390007fd4ea9","5e1b07470274390007fd4eac","5e1b0d540274390007fd4eaf"]
        }
        data: {
          published: true
        }
      ) {
        count
      }
    }
    

Prisma 查询

PRISMA提供两种方法通过关系字段检索节点列表

  • 简单的对象查询(关系查询)

    使用对象查询来获取单个节点或某个对象类型的节点列表。这里使用 posts 查询来获取 Post 节点的列表

    query {
      posts {
        id
        title
        published
      }
    }
    

    ⚠️这里需要说明的一点是,也可以在查询的时候进行筛选,比如下面使用 where 参数为返回的 users 指定条件,筛选所有age大于18岁的User节点 👇当然这里我没有在 user 中添加 age 这个字段,so…自行领会😂

    query {
      users(where: {
        age_gt: 18
      }) {
        id
        name
      }
    }
    
  • 连接查询

    与直接返回节点列表的简单关系查询相比,连接查询基于Relay Connection模型。 除了分页信息之外,Prisma API中的连接还具有高级功能,如聚合

    对象查询直接返回节点列表。在特殊情况下或使用高级功能时,使用连接查询是首选选项。它们是 Relay connections(中继连接)的延伸(并且完全符合)。Relay connections 的核心思想是提供关于数据中边缘的元信息。例如,每条边不仅可以访问关于相应对象(节点)的信息,还可以与允许实现强大分页的游标相关联

    query {
      postsConnection {
        edges {
          node {
            id
            title
            published
          }
        }
      }
    }
    

查询参数

在整个Prisma API中,您会发现可以提供的查询参数以进一步控制查询响应。查询参数有:

使用orderBy按节点任何字段值排序
通过使用where的标量或关系过滤器在查询中选择节点
查询字符串中使用first、before、last、after和skip对节点分页

排序查询

查询某个类型的所有节点时,可以为每个类型的标量字段提供 orderBy 参数:orderBy: _ASC 或 orderBy: _DESC

  • 按照title升序排序
query {
  posts(orderBy: title_ASC) {
    id
    title
    published
  }
}

⚠️ 你所排序的字段不必在实际查询中选择。如果没有指定顺序,则响应会自动按id字段升序排列

Prisma Docs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值