关系型数据库,一般会涉及到是物理删除,还是逻辑删除,而对象数据库,大概直接删掉就好了。
所以简单一点,直接删掉就好。
删除对象
相当于关系型数据库里的删除记录。indexedDB的步骤是:
- 打开数据库
- 开启事务
- 打开对象仓库(表)
- 删除对象
打开数据库的操作,在help里面已经实现了。
开启事务,可以通过help开启,也可以不显性开启,而是默认开启,然后就是开仓库装对象了。
/**
* 删除对象
* @param { IndexedDBHelp } help 访问数据库的实例
* @param { string } storeName 仓库名称(表名)
* @param { string|number } id
* @param { IDBTransaction } tranRequest 如果使用事务的话,需要传递开启事务时创建的连接对象
* @returns 添加记录的ID
*/
export default function deleteData (help, storeName, id, tranRequest = null) {
// 定义一个 Promise 的实例
return new Promise((resolve, reject) => {
// 定义个函数,便于调用
const _delete = (__tran) => {
__tran
.objectStore(storeName) // 获取store
.delete(id) // 删除一个对象
.onsuccess = (event) => { // 成功后的回调
resolve(event.target.result)
}
}
// 判断数据库是否打开
if (tranRequest === null) {
help.beginWrite([storeName]).then((tran) => {
_delete(tran)
})
} else {
_delete(tranRequest)
}
})
}
使用方式
// 引入help
import { deleteModel } from '../../../packages/websql.js'
/**
* 实现删除服务
* @param {object} userInfo 当前登录人的信息
* @param {object} help 访问数据库的实例
* @param {objec} info 服务的 meta
* @param {object} model 占位用
* @param {number|string} id 记录ID
* @returns 返回影响的行数
*/
export default function del (userInfo, help, info, model, id) {
return new Promise((resolve, reject) => {
deleteModel(help, info, id).then((count) => {
resolve( count )
}).catch((err) => {
reject(err) // '删除数据出错!'
})
})
}
添加、修改、删除,一样的套路,便于修改维护,和使用,而且还可以支持事务。
开启一个事务,然后进行连续的操作。
好吧,事务参数应该改一下。