首页  >  问答  >  正文

php - Laravel的事务处理求解.

public function store(Request $request, $id)
{
    $externalAccount = ExternalAccounts::find($id);
    DB::beginTransaction();
    try {
        $externalAccount->fund_number = 999;
        $externalAccount->capital_balance = 'kjhkjhkj';
        $externalAccount->save();
        DB::commit();
    } catch (Exception $e){
       DB::rollback();
       throw $e;
    }
}

第一次用Laravel。。
capital_balance字段为int类型,我故意传进去字符串类型,这样写入肯定会出错的。
但是上面的fund_number居然写入成功了,没有回滚= =。。
求老司机解答。。
mysql引擎没错,是InnoDB。
PHP中文网PHP中文网2748 天前345

全部回复(3)我来回复

  • 伊谢尔伦

    伊谢尔伦2017-04-10 16:18:58

    我估计是mysql的坑,你拿生成好的sql直接到mysql里面去执行一下看看

    回复
    0
  • PHPz

    PHPz2017-04-10 16:18:58

    mysql 严格模式和非严格模式的区别,你新写入的数据capital_number字段为0 或者空?

    回复
    0
  • 怪我咯

    怪我咯2017-04-10 16:18:58

    Laravel框架已经重写了各种exception异常处理类

    事务提交的异常处理类为IlluminateDatabaseQueryException,所以用exception类是捕获不到事务提交错误的异常的

        try {}
        } catch (\Illuminate\Database\QueryException $e) {
            // var_dump($e);
        }
        

    这样才能捕获到

    回复
    0
  • 取消回复