2017-10-01 4 views
0

トランザクションを使用して新しい\ Exception( 'Error')をスローすると、私がエラーが発生したときに、下のコードから新しい{Exception( 'Error');}を実行し、if($ errors)が機能しない場合はトランザクションを使用して新しい Exception( 'Error')をスローした後、どのようにリダイレクトできますか?

はいずれもnew \ Exceptionをスローした後にリダイレクトされます)?

$errors = false; 
    DB::transaction(function() use ($count,$request,$a,$errors) { 
     for ($i=0; $i < $count; $i++) { 
      $warehouse_products_sell = New Warehouse_products_sell; 
      $id_w = $request->input('idw'); 
      $id_c = $request->get('id_c')[$i]; 
      $id_p = $request->get('id_p')[$i]; 
      $qty = $request->input('quantity_box')[$i]; 
      $price = $request->input('price')[$i]; 
      $available = $this->check_stock($id_w, $id_p, $qty); 
      if($available > 0){ 

      $warehouse_products_sell->save(); 
      }else{ 

      echo "error"; 
      $errors = true; 
      throw new \Exception('Error'); 
      } 
     } 
    }); 
    if ($errors) { 
     return redirect('URL'); 
    }else{ 
     return 'x'; 
    } 
+0

キャッチは、それが、その後... RTM http://php.net/manual/en/internals2。 opcodes.catch.php –

+0

@LawrenceCherone私はキャッチしようとしますが、もし私が3つの正しいデータと1つの間違ったデータを持っているなら、3つのデータを保存します。 – user8663822

+1

その後、catchセクションでbreakを使用します。 –

答えて

1

データベース・トランザクションなしで自分で確認することができます何かのためにデータベーストランザクションを乱用しないでください:

// Step 1. Check all products 
$products = []; 
for ($i=0; $i < $count; $i++) { 
    $warehouse_products_sell = New Warehouse_products_sell; 
    $id_w = $request->input('idw'); 
    $id_c = $request->get('id_c')[$i]; 
    $id_p = $request->get('id_p')[$i]; 
    $qty = $request->input('quantity_box')[$i]; 
    $price = $request->input('price')[$i]; 
    $available = $this->check_stock($id_w, $id_p, $qty); 
    if ($available <= 0){ 
     throw new \Exception(sprintf('Not enough stock for %s/%s (stock=%d, requested=%d)', $id_w, $id_p, $available, $qty)); 
    } 
    $products[] = $warehouse_products_sell 
} 

// Step 2. All checks have passed, save data to database 
DB::transaction(function() use ($products) { 
    foreach ($products as $product) { 
     $product->save(); 
    } 
}); 
+0

あなたがここで私の最初のtransacrionsを使用していただきありがとう – user8663822

関連する問題