额外
部分类型

部分类型

自 v0.6.7 起可用

partial_unchecked! 宏可以在所有模型模块中找到,并允许定义具有 to_params 函数的结构体,该函数将其转换为在 update_unchecked 内部使用。生成的结构体的每个字段都与模块中 Data 结构体中的等效字段具有相同的类型,只是包装在 Option 中。

这对于使用 axum (在新标签页中打开)rspc (在新标签页中打开) 构建的 Web API 等内容很有用,因为接收更新作为结构体而不是更改列表会更符合人体工程学。

更通用的 partial! 宏尚不存在,因为在支持 嵌套写入 (在新标签页中打开) 之前无法支持关系。

设置

使用部分宏需要与 选择 & 包含 相同的设置,因为必须提供 module_path

示例

给定以下模式

model Post {
	id Int @id @default(autoincrement())
	title String
	content String
}

可以这样编写更新器函数

post::partial_unchecked!(PostUpdateData {
	title
	content
})
 
pub async fn update_post(
	db: &PrismaClient,
	id: i32,
	data: PostUpdateData
) {
	db.post()
		.update_unchecked(post::id::equals(id), data.to_params())
		.exec()
		.await;
}

上面对 partial_unchecked! 的使用会生成类似以下内容

pub struct PostUpdateData {
	title: Option<String>,
	content: Option<String>
}
 
impl PostUpdateData {
	pub fn to_params(self) -> Vec<post::UncheckedSetParam> {
		[
			self.title.map(post::title::set),
			self.content.map(post::content::set)
		].into_iter().flatten().collect()
	}
}