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)