文档
演练
查找

基本 API

查找、更新和删除记录。

示例使用以下 Prisma 模式

model Post {
  id        String   @id @default(cuid())
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  published Boolean
  title     String
  content   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
}

读取数据

查找多条记录

posts, err := client.Post.FindMany(
  db.Post.Title.Equals("hi"),
).Exec(ctx)

如果未找到任何记录,则上述查询将返回一个切片,而不会返回错误(与普通的 SQL 查询一样)。

查找唯一记录

FindUnique 查找保证唯一的记录,例如 @id 字段或标记为 @unique 的字段。

post, err := client.Post.FindUnique(
  db.Post.ID.Equals("123"),
).Exec(ctx)
if errors.Is(err, db.ErrNotFound) {
  log.Printf("no record with id 123")
} else if err != nil {
  log.Printf("error occurred: %s", err)
}

查找单条记录

FindFirst 查找找到的第一条记录。它具有与 FindMany 相同的查询功能,但充当一个便利方法,仅返回找到的第一条记录。

post, err := client.Post.FindFirst(
  db.Post.Title.Equals("hi"),
).Exec(ctx)
if errors.Is(err, db.ErrNotFound) {
  log.Printf("no record with title 'hi' found")
} else if err != nil {
  log.Printf("error occurred: %s", err)
}
 
log.Printf("post: %+v", post)

如果不存在这样的记录,则返回一个 ErrNotFound 错误(由生成的客户端导出)。

查询 API

查询操作根据您模式中的数据类型而变化。例如,整数和浮点数将具有大于和小于操作,而字符串具有前缀和后缀操作。

posts, err := client.Post.FindMany(
  // query for posts containing the title "What"
  db.Post.Title.Contains("What"),
).Exec(ctx)

要探索更多查询过滤器,请参阅 所有可能的查询过滤器

查询关系

您可以使用“Some”、“Every”或“None”查询关系,分别查询仅部分、全部或无记录匹配的记录。您可以根据需要嵌套这些查询。

查看“Every”过滤器的注意事项(在新标签页中打开)

// get posts which have at least one comment with a content "My Content" and that post's titles are all "What up?"
posts, err := client.Post.FindMany(
  db.Post.Title.Equals("What up?"),
  db.Post.Comments.Some(
    db.Comment.Content.Equals("My Content"),
  ),
).Exec(ctx)

要详细了解查询关系,请参阅 更多关系查询示例