模型删除数据
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'] // 同时删除关联的书籍
});
}
注意事项
- 使用软删除时,记录并未真正从数据库中删除,只是标记了删除时间
- Destroy 相关方法会直接从数据库中删除数据,不可恢复
- 批量删除时建议使用事务确保数据一致性
- 删除关联数据时要注意维护数据完整性
完整示例
以下是一个完整的模型定义示例,包含软删除配置:
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
}
}