文档
演练
简介

简介

Prisma Go 客户端旨在尽可能地完全类型安全,即使对于复杂的查询也是如此。这就是它使用函数式语法来确保您提供的每个参数都与数据库中的类型匹配的原因。如果您更改了数据库中的内容,并且更改与代码不兼容,您将收到编译时错误。

这些示例使用以下 prisma 架构

model Post {
  id        String   @id @default(cuid())
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  published Boolean
  title     String
  content   String?
  desc      String?
 
  comments Comment[]
}
 
model Comment {
  id        String   @id @default(cuid())
  createdAt DateTime @default(now())
  content   String
 
  post   Post   @relation(fields: [postID], references: [id])
  postID String
}

语法概念

生成的 Go 客户端使用特定且一致的函数式 API 语法。

要获取所有帖子,您可以执行以下操作

posts, err := client.Post.FindMany().Exec(ctx)

通常您希望查询某个 ID 或其他字段。Go 客户端以 <model>.<field>.<method> 的形式公开了一个完全类型安全的查询构建器

posts, err := client.Post.FindMany(
  // package.
  // model.
  //      field.
  //            method.
  //                  (value)
  db.Post.Title.Equals("hi"),
).Exec(ctx)

此架构始终使用。您通常只需键入 db.,然后查看您的编辑器自动完成功能将建议哪些模型、字段和操作。根据模型或字段的类型或形状,可能会有不同的操作可用。如果字段是可选的,您还将获得其他方法,例如 IsNull() 和 *Optional 变体来查询 SQL NULL

posts, err := client.Post.FindMany(
  db.Post.Title.Equals("hi"),
  db.Post.Title.Contains("hi"),
  db.Post.Content.IsNull(),
  db.Post.Desc.Contains(variable),
  db.Post.Desc.EqualsOptional(pointerVariable),
).Exec(ctx)