从DB :: Transaction Closure()返回客户端的日期

时间:2015-10-24 17:03:26

标签: laravel transactions laravel-5

我在db事务闭包中执行了几个数据库保存:

DB::transaction(function() {
    ...
});

但是我现在要做的是当事务失败而不是抛出异常时我想直接返回客户端的自定义JSON对象,如果事务成功,我想做同样的事情。

这是我的目标:

return [
  'code' => '',
  'message' => '',
  'data' => []
];

我如何从闭包中将上述内容返回给客户?

1 个答案:

答案 0 :(得分:2)

您可以使用DB :: beginTransaction,DB :: commit和DB :: rollback方法代替DB :: transaction Closure,以便在代码中拥有更多控制权,您可以像这样包装数据库操作:

DB::beginTransaction();

try {
    DB::insert(...);
    DB::insert(...);
    DB::insert(...);

    //If everything is ok we commit
     DB::commit();
     return response()->json(["status" => "success"])
  } catch (Exception $e) {
      //something goes wrong, we rollback
      DB::rollback();
      return response()->json(["error" => "Some error"]);
}

您可以在database transaction docs

中进行更多研究