删除
删除单条记录
使用 deleteById() 方法根据主键删除记录:
ts
import { getORM } from '@ibestservices/ibest-orm';
const orm = getORM();
// 根据主键删除
orm.deleteById(User, 1);
// 批量删除多个 ID
orm.deleteById(User, [1, 2, 3]);条件删除
使用查询构建器的 delete() 方法:
ts
// 删除指定条件的记录
orm.query(User)
.where({ status: 'inactive' })
.delete();
// 组合条件删除
orm.query(User)
.where({ age: { lt: 18 } })
.where({ verified: false })
.delete();软删除
如果模型配置了 @SoftDelete 装饰器,删除操作会标记记录而非真正删除:
ts
import { Table, Column, PrimaryKey, SoftDelete } from '@ibestservices/ibest-orm';
@Table()
class Article {
@PrimaryKey()
id?: number;
@Column()
title?: string;
@SoftDelete()
deletedAt?: string; // 软删除标记字段
}
// 软删除(设置 deletedAt 时间戳)
orm.query(Article).where({ id: 1 }).delete();
// 查询时自动过滤已删除记录
const articles = orm.query(Article).find(); // 不包含已删除的
// 包含已删除记录
const all = orm.query(Article).withTrashed().find();
// 只查询已删除记录
const deleted = orm.query(Article).onlyTrashed().find();
// 恢复已删除记录
orm.query(Article).where({ id: 1 }).restore();
// 强制物理删除
orm.query(Article).where({ id: 1 }).forceDelete();批量删除
ts
// 使用 IN 条件批量删除
orm.query(User)
.whereIn('id', [1, 2, 3, 4, 5])
.delete();
// 使用 LIKE 条件删除
orm.query(User)
.where({ name: { like: '测试%' } })
.delete();在事务中删除
批量删除建议在事务中执行:
ts
orm.transaction(() => {
// 删除用户的所有订单
orm.query(Order).where({ userId: 1 }).delete();
// 删除用户
orm.deleteById(User, 1);
});注意事项
- 谨慎操作:删除操作不可逆,建议先备份或使用软删除
- 添加条件:避免无条件删除导致清空整张表
- 返回值:
delete()返回受影响的行数