2017-01-16 59 views
1

我正在使用Laravel 5.2.31版。我在CircuitController和CircuitService中有結構化的代碼,以便重用一些功能,比如應該在Java中完成的功能。如何在Laravel中處理事務

  1. CircuitController:

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

2.CircuitService:

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')]); 
    } 

我怎樣才能使那些2種方法在一個事務中工作?

編輯基於幫助來自@路易斯·費雷拉

在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); 
    }); 
} 

回答

1

只需附上他們的交易功能從Laravel:

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

更多的信息在這裏:https://laravel.com/docs/5.3/database#database-transactions