2017-01-16 24 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つの方法を行うことができますか?

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からのトランザクション機能でそれらを囲みます:コードはCircuitControllerに

ルイス・フェレイラ@からの助けに基づくソリューションを編集

は、次のように更新する必要が

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

関連する問題