使用事务处理的话,需要数据库引擎支持事务处理,MySQL 需要使用 InnoDB 引擎。
最简单的方式是使用 transaction 方法操作数据库事务,当闭包中的代码发生异常会自动回滚
Db::transaction(function () {
});
/** 基类中实现 services/baseservices **/
public function transaction(callable $closure, bool $isTran = true)
{
return $isTran ? Db::transaction($closure) : $closure();
}
/** 服务层相关调用 **/
public function del(int $id)
{
/** @var ArticleContentServices $articleContentService */
$articleContentService = app()->make(ArticleContentServices::class);
$this->transaction(function () use ($id, $articleContentService) {
$res = $this->dao->delete($id);
$res = $res && $articleContentService->del($id);
if (!$res) {
throw new AdminException('删除失败');
}
});
}