GraphQL 是一种前端应用程序的查询语言,让开发人员能够准确地定义客户端需要的数据。Prisma 是一个开源的数据库 ORM,它使得处理数据库复杂性变得简单。使用 Prisma 对 GraphQL 进行数据建模,能够大大提高开发效率。在本文中,我们将了解如何使用 Prisma 来进行 GraphQL 数据建模。
安装 Prisma
npm install prisma -g
初始化 Prisma 项目
prisma init
创建 Prisma 数据模型
// www.javascriptcn.com code example
type User {
id: ID! @id
name: String!
email: String! @unique
posts: [Post!]!
}
type Post {
id: ID! @id
title: String!
content: String!
author: User!
}生成 Prisma 数据库迁移
prisma migrate save --name "init" prisma migrate up
生成 Prisma 客户端
prisma generate
在 GraphQL Schema 中使用 Prisma
// www.javascriptcn.com code example
type Query {
users: [User!]!
user(id: ID!): User!
posts: [Post!]!
post(id: ID!): Post!
}
type Mutation {
createUser(name: String!, email: String!): User!
createPost(title: String!, content: String!, authorId: ID!): Post!
}
type User {
id: ID!
name: String!
email: String!
posts: [Post!]!
}
type Post {
id: ID!
title: String!
content: String!
author: User!
}在解析器中使用 Prisma
// www.javascriptcn.com code example
const { PrismaClient } = require('@prisma/client')
const prisma = new PrismaClient()
const resolvers = {
Query: {
users: (_parent, _args, _context) => {
return _context.prisma.user.findMany()
},
user: (_parent, args, _context) => {
return _context.prisma.user.findOne({
where: {
id: Number(args.id),
},
})
},
posts: (_parent, _args, _context) => {
return _context.prisma.post.findMany()
},
post: (_parent, args, _context) => {
return _context.prisma.post.findOne({
where: {
id: Number(args.id),
},
})
},
},
Mutation: {
createUser: (_parent, args, _context) => {
return _context.prisma.user.create({
data: {
name: args.name,
email: args.email,
},
})
},
createPost: (_parent, args, _context) => {
return _context.prisma.post.create({
data: {
title: args.title,
content: args.content,
author: {
connect: { id: Number(args.authorId) },
},
},
})
},
},
User: {
posts: (_parent, _args, _context) => {
return _context.prisma.user
.findOne({
where: {
id: _parent.id,
},
})
.posts()
},
},
Post: {
author: (_parent, _args, _context) => {
return _context.prisma.post
.findOne({
where: {
id: _parent.id,
},
})
.author()
},
},
}
module.exports = {
resolvers,
}现在,我们已经完成了 GraphQL 数据建模的过程,并准备好在项目中使用。使用 Prisma 对 GraphQL 进行数据建模,能够大大简化开发流程,并让我们更容易地处理复杂的数据库结构和关系。希望本文对你有所帮助。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/6780c4c3ce7f486125484eb7