我正在使用Laravel 5.2.31版。我在CircuitController和CircuitService中有結構化的代碼,以便重用一些功能,比如應該在Java中完成的功能。如何在Laravel中處理事務
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);
});
}