1 个不稳定版本
0.1.0 | 2022年7月12日 |
---|
#1375 in 数据库接口
25KB
451 行
柴油-软删除
将软删除集成到 Diesel 查询构建器中。
软删除是一种不实际删除数据库条目,而是将其标记为已删除的实践。这通常采用 deleted
布尔标志的形式。然而,这隐含着在查询中始终筛选此标志,这既繁琐又容易出错:始终筛选标志是重复的,可能会被遗忘,并且可能导致如连接中的查询错误。
该库的主要新增功能是对查询构建器的扩展,新增了以下操作
soft_find
,它类似于find
,但应用了软删除筛选器。soft_inner_join
/soft_left_join
,它们类似于inner_join
/left_join
,但将软删除筛选器应用于ON
子句,而不是WHERE
子句。
用法
您的模型需要有一个 deleted
布尔列。然后,使用 soft_delete
宏在表上实现 SoftDelete
特性。然后就可以使用它了!一旦导入前言,就可以使用 soft_find
和其他函数来代替常规的 find
等宏。
示例
use diesel_softdelete::prelude::*;
table! {
user (id) {
id -> Integer,
name -> Text,
deleted -> Bool,
}
}
soft_delete!(user);
conn.batch_execute("
create table user(
id integer primary key,
name text not null,
deleted bool not null default false
);
insert into user(id, name, deleted) values (1, 'Alice', false), (2, 'Bob', true);
")?;
let name = user::table.soft_find(1).select(user::name).first::<String>(&conn).optional()?;
assert_eq!(name, Some("Alice".to_owned()));
let name = user::table.soft_find(2).select(user::name).first::<String>(&conn).optional()?;
assert_eq!(name, None);
许可证:MIT OR Apache-2.0
依赖项
~3.5MB
~73K SLoC