tp5 事务
/**
* 事务
*/
public function transaction(){
Db::startTrans();
try{
Db::name('version')->where('id','1')->update(['version'=>1.1]);
Db::name('version')->where('id','2')->update(['versions'=>2]);
Db::name('version')->where('id','3')->update(['version'=>3.3]);
Db::name('version')->where('id','4')->update(['version'=>4.4]);
echo 'try';
// 提交事务
Db::commit();
//$this->success('数据更新成功!');
dump('success');
} catch (\Exception $e) {
echo 'catch';
// 回滚事务
Db::rollback();
dump($e->getMessage());
//$this->error('数据更新错误' & $e->getMessage());
}
}
2、手动控制事务 (***)
// 开启事务
Db::startTrans();
// 事务
try{
// 删除数据id 31
$a=Db::table("user")->delete(31);
// 判断是否删除成功
if (!$a) {
Db::rollback();
throw new \Exception("删除id 31 数据没有成功");
}
// 删除不存在的数据 id 32
$b=Db::table("user")->delete(32);
// 判断是否删除成功
if (!$b) {
Db::rollback();
throw new \Exception("删除id 32 数据没有成功");
}
// 执行提交操作
Db::commit();
}catch(\Exception $e){
// 回滚事务
Db::rollback();
// 获取提示信息
dump($e->getMessage());
}
public function transaction()
{
$modelA = model('A');
$modelA->startTrans(); // 开启事务A
$result = $modelA->save($data1);
if($result === false){
$modelA->rollBack(); // 事务A回滚
$this->error('添加A信息失败,请重试');
}
$modelB = model('B');
$modelB->startTrans(); // 开启事务B
$result = $modelB->save($data2);
if($result === false){
$modelB->rollBack(); // 事务B回滚
$modelA->rollBack(); // 事务A回滚
$this->error('添加B信息失败,请重试');
}
$modelC = model('C');
$modelC->startTrans(); // 开启事务C
$result = $modelC->save($data3);
if($result === false){
$modelC->rollBack(); // 事务C回滚
$modelB->rollBack(); // 事务B回滚
$modelA->rollBack(); // 事务A回滚
$this->error('添加C信息失败,请重试');
}
// 提交事务
$modelC->commit();
$modelB->commit();
$modelA->commit();
$this->success('添加成功', url('admin/index/add'));
}
alter table 表名 engine=innodb;
Db::startTrans();
try{
$res1=Db::name('version')->insert(['version'=>5.3]);
$res2=Db::name('version')->insert(['version'=>5.4]);
/*
这里需要抛出异常 才会执行回滚
这个tp5的实例 Db类会自动抛出异常 所以不用判断
最好的是加上判断
*/
if($res1 && $res2){
// 提交事务
Db::commit();
// 提示成功语句
}
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
dump($e->getMessage());
// 提示失败语句
}