美文网首页prisma我爱编程
PRISMA基础:入门二

PRISMA基础:入门二

作者: guog | 来源:发表于2018-04-28 17:51 被阅读34次

    本文属使用Prisma构建GraphQL服务系列。

    通过PRISMA基础:入门一已了解PRISMA的基础,现在我们来看看:如何部署Prisma服务,如何使用查询(queries)和突变(mutations)访问GraphQL API。

    本文主要介绍通过修改数据模型(Data Model)更新API,如下:

    • 修改数据模型(Data Model);
    • 部署更改以更新服务的API;

    修改数据模型(Data Model)

    这两篇(PRISMA入门一 和 本文 )最后要做的事情是:如何通过修改数据模型(Data Model)以更新API。

    我们希望对数据模型(Data Model)进行如下修改:

    • User类型添加age 字段;
    • 跟踪User最初创建或上次更新的确切时间。
    • 添加新的Post类型及其字段。
    • UserPost类型之间创建一对多关系来表示一个User可以创建多个Post节点。

    (1) 首先将所需的字段添加到User类型中:

    type User {
      id: ID! @unique
      createdAt: DateTime!
      updatedAt: DateTime!
      name: String!
      age: Int
    }
    

    age字段的类型为Int,在User类型上不是必须的,这意味着可以存储年龄为空的User节点(事实上,之前创建的名为Sarah的User就是这种情况)。

    另一方面createdAtupdatedAt实际上是由Prisma管理的特殊字段。Prisma内部始终维护这些字段 - 但是只有在您将它们添加到数据模型中的类型定义时,它们才会暴露在您的API中(id字段也是如此)。

    注意:现在,createdAtupdatedAtid这些字段的值是只读的。后面可以通过常规突变(mutations)来设置这些字段的值。要了解有关此功能和时间表的更多信息,请查看此GitHub issue

    此时,您所做的更改只是本地的,如果您现在用GraphQL Playground打开它,将无法访问新加字段,因为还没有部署。

    部署修改以更新API

    (2) 要使更改生效,您需要再次部署该服务。在hello-world目录(见PRISMA入门一)中,运行以下命令:

    prisma deploy
    

    您现在可以打开一个新的GraphQL Playground或reload已打开的schema(用于reload schema的按钮是GraphQL API的URL旁边的刷新按钮)。
    如上搞定后,现在可以访问User类型中新加的字段了。

    (3) 试试下面这个突变(mutation)创建新的User节点,并设置其age字段:

    mutation {
      createUser(data: {
        name: "John"
        age: 42
      }) {
        id
        createdAt
        updatedAt
      }
    }
    

    最后,在本教程中,我们希望将Post类型添加到数据模型中,并创建与现有User类型的关系。

    在类型之间创建关系非常自然(natural):您只需添加一个相关类型的新字段来表示关系的一端。关系可以 (但不必)双向进行。

    继续,我们开始定义带关系的新Post类型。

    (4) 打开datamodel.graphql并添加以下类型定义:

    type Post {
      id: ID! @unique
      title: String!
      author: User!
    }
    

    (5) 要应用这些更改,您需要再次在hello-world目录内运行prisma deploy

    每篇Post现在都需要一个User节点作为其作者,这种工作方式是通过使用connect参数来进行嵌套突变(mutations)。

    (6) 例如,您可以发送以下突变(mutations)以将新的Post节点与现有的User节点连接起来(您当然必须将__USER_ID__占位符替换为用户的实际ID):

    mutation {
      createPost(data: {
        title: "GraphQL is awesome"
        author: {
          connect: {
            id: "__USER_ID__"
          }
        }
      }) {
        id
      }
    }
    

    我们还要添加关系的另一端,以便UserPost类型之间有适当的一对多关系。

    (7) 打开datamodel.graphql并向User类型添加一个名为posts的新字段,代码如下所示:

    type User {
      id: ID! @unique
      createdAt: DateTime!
      updatedAt: DateTime!
      name: String!
      age: Int
      posts: [Post!]!
    }
    

    就是这么简单!新posts字段表示由该User创建的发布节点的列表。

    (8) 当然,现在这也允许您发送嵌套查询(queries),您要求所有User节点以及这些User的所有Post节点:

    {
      users {
        name
        posts {
          title
        }
      }
    }
    

    相关文章

      网友评论

        本文标题:PRISMA基础:入门二

        本文链接:https://www.haomeiwen.com/subject/lgaglftx.html