Skip to content

模型删除数据

Yao 提供了多种删除数据的方法,包括软删除和永久删除。本文档将详细介绍各种删除方式的使用方法。

删除方法概览

方法说明是否支持软删除
Delete删除单条记录
Destroy永久删除单条记录
DeleteWhere条件批量删除
DestroyWhere条件批量永久删除

软删除配置

在模型中启用软删除功能:

json
{
  "option": {
    "soft_deletes": true
  }
}

基本用法

Delete 方法(支持软删除)

javascript
// 通过 ID 删除单条记录
function deleteRecord() {
  return Process('models.category.delete', 10);
}

Destroy 方法(永久删除)

javascript
// 永久删除指定 ID 的记录
function destroyRecord() {
  return Process('models.category.destroy', 9);
}

DeleteWhere 方法(条件删除)

javascript
// 条件批量删除
function deleteByCondition() {
  return Process('models.category.deletewhere', {
    wheres: [
      { column: 'parent_id', value: 4 },
      { column: 'status', value: 'inactive' }
    ]
  });
}

DestroyWhere 方法(条件永久删除)

javascript
// 条件批量永久删除
function destroyByCondition() {
  return Process('models.category.destroywhere', {
    wheres: [{ column: 'parent_id', value: 4 }]
  });
}

高级用法

复杂条件删除

javascript
// 使用多个条件和操作符
function complexDelete() {
  return Process('models.category.deletewhere', {
    wheres: [
      { column: 'parent_id', op: '>', value: 4 },
      { column: 'created_at', op: '<', value: '2023-01-01' },
      { method: 'or', column: 'status', value: 'archived' }
    ]
  });
}

关联删除

javascript
// 删除分类时同时删除相关书籍
function deleteWithRelated() {
  return Process('models.category.destroywhere', {
    wheres: [{ column: 'id', value: 1 }],
    withs: ['book'] // 同时删除关联的书籍
  });
}

注意事项

  1. 使用软删除时,记录并未真正从数据库中删除,只是标记了删除时间
  2. Destroy 相关方法会直接从数据库中删除数据,不可恢复
  3. 批量删除时建议使用事务确保数据一致性
  4. 删除关联数据时要注意维护数据完整性

完整示例

以下是一个完整的模型定义示例,包含软删除配置:

json
{
  "name": "书籍分类",
  "table": {
    "name": "category",
    "comment": "书籍分类"
  },
  "columns": [
    {
      "label": "ID",
      "name": "id",
      "type": "ID",
      "primary": true
    },
    {
      "label": "分类名称",
      "name": "name",
      "type": "string"
    }
  ],
  "option": {
    "timestamps": true,
    "soft_deletes": true
  }
}