freelsnamn

167 经验值

上面的代码被分成两段了,重发一下

function orderPay (Request $request) {

    $baseData = $request->get("baseData");
    $db = $baseData['数据库'];
    $d = $request->get('data');
    $accountDocuments = $d['accountDocuments'];
    $orderId = $d['订单id'];
    $update = $d['update'];

    DB::transaction(function () use ($db,$accountDocuments,$orderId,$update) {
        DB::connection($db)->table('财务记账表')->insert($accountDocuments);
        DB::connection($db)->table('订单表')->where('订单id', $orderId)->update($update);
    });
    $ok = true;
    $re = compact('ok','data');
    return response()->json($re, 200);
}

@Tomoe
非常感谢!
我是摄影师,做了一个工作室,正在用 swift 做 mac 的客户端,然后看着这里的视频学习Laravel做 api,没经过正式的编程学习, 代码可能比较~弱,贴出来请不要见笑
function orderPay (Request $request) {

    $baseData = $request->get("baseData");
    $db = $baseData['数据库'];
    $d = $request->get('data');
    $accountDocuments = $d['accountDocuments'];
    $orderId = $d['订单id'];
    $update = $d['update'];

// todo: 事务滚回失败

    DB::transaction(function () use ($db,$accountDocuments,$orderId,$update) {
        DB::connection($db)->table('财务记账表')->insert($accountDocuments);
        DB::connection($db)->table('订单表')->where('订单id', $orderId)->update($update);
    });
    $ok = true;
    $re = compact('ok','data');
    return response()->json($re, 200);
}

用Laravel5.1配合dingo 写一个 api, 这两天出现一个问题,就是Laravel数据库的事务总是失效,无论是用 DB::transaction(function () { }); 的方法进行自动事务,还是使用 beginTransaction 手动方式执行事务,在错误发生时始终无法  rollBack.

因为已经 google 很久了,我确定书写的语法没问题,也确定数据库是InnoDB, 遗憾的是问题始终无法解决.

现在我怀疑是因为使用了 dingo 的原因,是不是因为事务过程中抛出错误的时候,直接被 dingo 截取,然后就返回客户端了,所以无法执行 rollBack.

如果确实是 dingo 的错误处理方式引起的,那么请问有什么变通的处理方案呢?

谢谢!