文档
参考
功能
If Present 方法

XIfPresent 方法变体

如果您想查询数据并动态确定是否应忽略某个字段,或者如果您想公开一个仅设置某些字段的更新操作,您可以使用 IfPresent 方法变体。

这并不意味着 SQL NULL - 请改用 XOptional 方法变体。

这些示例使用以下 Prisma 架构

model Post {
  id      String  @id @default(cuid())
  title   String
  content String?
}

动态查询

如果您有一个 API 并希望最终用户决定要查询哪些字段,您可能需要动态查询。在以下示例中,将查询 title 和 content 字段,但如果变量为 nil,则表示应忽略该字段。

title := "hi"
var content *string
_, err := client.Post.FindMany(
  // query for this one
  db.Post.Title.EqualsIfPresent(&title),
  // ignore this one, since `content` nil
  db.Post.Content.EqualsIfPresent(content),
).Exec(ctx)

动态写入数据

动态写入数据的工作方式与查询相同。如果指针为 nil,则该字段将不会被触碰;如果存在,则该字段值将被更新。

var newTitle *string
newContent := "hi"
_, err := client.Post.FindUnique(
  db.Post.ID.Equals("123"),
).Update(
  // don't set because `newTitle` is nil
  db.Post.Title.SetIfPresent(newTitle),
  // set value
  db.Post.Content.SetIfPresent(&newContent),
).Exec(ctx)