Php 如何在Laravel中处理事务

Php 如何在Laravel中处理事务,php,laravel,Php,Laravel,我使用的是Laravel版本5.2.31。我在CircuitController和CircuitService中编写了结构化代码,以便重用一些函数,如Java中应该执行的操作 电路控制器: 公共函数pickingtcarton(请求$Request){ $circuitService=新的circuitService(); //在这里做点生意 $circuitService->completeCircuit($circuit\u id); $circuitService->completeBox

我使用的是Laravel版本5.2.31。我在CircuitController和CircuitService中编写了结构化代码,以便重用一些函数,如Java中应该执行的操作

  • 电路控制器:

    公共函数pickingtcarton(请求$Request){
    $circuitService=新的circuitService();
    //在这里做点生意
    $circuitService->completeCircuit($circuit\u id);
    $circuitService->completeBoxAtCircuit($circuit\u id);
    }

  • 2.1服务:

    public function completeCircuit($circuit_id, $user){
        $circuit = Circuit::find($circuit_id);
        $circuit->status = Config::get('constants.status.tour.completed');
        $circuit->pick_by = Auth::user();
        $circuit->complete_time=Carbon::now();
        //update complete time later.
        $circuit->save();
    }
    
    public function completeBoxAtCircuit($circuit_id, $user){
            DB::table('box_at_circuit')
                ->where('circuit_id', $circuit_id)
                ->update(['status'=> Config::get('constants.status.tour.completed')]);
        }
    
    如何使这两种方法在事务中工作

    根据@Luís Ferreira的帮助编辑了解决方案

    CircuitController中的代码需要更新如下:

    public function pickingAtCarton(Request $request) {
       DB::transaction(function ($request) use ($request) {
          $circuitService = new CircuitService();
          // Do some business here
          $circuitService->completeCircuit($circuit_id);
          $circuitService->completeBoxAtCircuit($circuit_id);
       });
    }
    

    只需将它们包含在Laravel的事务函数中:

    public function pickingAtCarton(Request $request) {
       DB::transaction(function () {
          $circuitService = new CircuitService();
          // Do some business here
          $circuitService->completeCircuit($circuit_id);
          $circuitService->completeBoxAtCircuit($circuit_id);
       });
    }
    
    更多信息请点击此处: