Skip to content

删除

删除单条记录

使用 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);
});

注意事项

  1. 谨慎操作:删除操作不可逆,建议先备份或使用软删除
  2. 添加条件:避免无条件删除导致清空整张表
  3. 返回值delete() 返回受影响的行数