Php 如何在保存到数据库之前检查循环中的所有数据

Php 如何在保存到数据库之前检查循环中的所有数据,php,mysql,laravel,laravel-5.4,Php,Mysql,Laravel,Laravel 5.4,现在在我的控制器中看起来是这样的 assume that $available = [ 1,2,3,4 ] for ($i=0; $i < 3; $i++) { if($available < 3){ echo 'success'; $database->save(); }else{ echo 'error'; } } 假设$available=[1,2,3,4] 对于($i

现在在我的控制器中看起来是这样的

assume that $available = [ 1,2,3,4 ]

    for ($i=0; $i < 3; $i++) {
      if($available < 3){
        echo 'success';
        $database->save();
      }else{
        echo 'error';
      }
    }
假设$available=[1,2,3,4]
对于($i=0;$i<3;$i++){
如果($可用<3){
呼应"成功",;
$database->save();
}否则{
回声“错误”;
}
}
这将像success error一样输出

它会将3个成功保存到数据库中,如何检查我是否有1个错误它不会保存任何数据

现在我正在使用

   $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->add_by = $request->input('add_by');

            $warehouse_products_sell->id_w = $id_w = $request->input('idw');
            $warehouse_products_sell->id_c = $request->get('id_c')[$i];
            $warehouse_products_sell->id_p = $id_p = $request->get('id_p')[$i];
            $warehouse_products_sell->quantity_box = $qty = $request->input('quantity_box')[$i];
            $warehouse_products_sell->price = $request->input('price')[$i];
            $warehouse_products_sell->serial_num = $a;
            $available = $this->check_stock($id_w, $id_p, $qty);
            $warehouse_products_sell->save();
          }else{

            echo "error";
            $errors = true;

            throw new Exception('Error');
          }
        }
    });
    if ($errors) {
       return redirect('URL');
    }else{
        return 'x';
    }
$errors=false;
DB::事务(函数()使用($count、$request、$a、$errors){
对于($i=0;$i<$count;$i++){
$warehouse\u products\u sell=新的warehouse\u products\u sell;
$id_w=$request->input('idw');
$id_c=$request->get('id_c')[$i];
$id\u p=$request->get('id\u p')[$i];
$qty=$request->input('quantity_box')[$i];
$price=$request->input('price')[$i];
$available=$this->检查库存($id\u w,$id\u p,$qty);
如果($available>0){
$warehouse\u products\u sell->add\u by=$request->input('add\u by');
$warehouse\u products\u sell->id\u w=$id\u w=$request->input('idw');
$warehouse\u products\u sell->id\u c=$request->get('id\u c')[$i];
$warehouse\u products\u sell->id\u p=$id\u p=$request->get('id\u p')[$i];
$warehouse\u products\u sell->quantity\u box=$quantity=$request->输入('quantity\u box')[$i];
$warehouse\u products\u sell->price=$request->input('price')[$i];
$warehouse\u products\u sell->serial\u num=$a;
$available=$this->检查库存($id\u w,$id\u p,$qty);
$warehouse\u products\u sell->save();
}否则{
回声“错误”;
$errors=true;
抛出新异常(“错误”);
}
}
});
如果($errors){
返回重定向('URL');
}否则{
返回'x';
}

您可以使用事务。看一看

您的代码将更改为此

DB::transaction(函数()使用($database,$available){
对于($i=0;$i<3;$i++){
如果($可用<3){
呼应"成功",;
$database->save();
}否则{
回声“错误”;
抛出新的\异常('Error');
}
}
});
如果抛出任何异常,它将自动回滚


如果出现任何问题,则添加重定向

$errors=false;
DB::事务(函数()使用($database、$available、$errors){
对于($i=0;$i<3;$i++){
如果($可用<3){
呼应"成功",;
$database->save();
}否则{
回声“错误”;
$errors=true;
抛出新的\异常('Error');
}
}
});
如果($errors){
返回重定向('URL');
}

thnks sir i nv know before=]是他们在抛出异常之后重定向路由或返回页面的方式否,因为当您这样做时,
函数(事务)将捕获该异常并回滚。您可以做的是在
use
上传递一个变量,如果有任何错误,请将其更改为false或它将您标记为错误的任何内容,当事务结束时,读取该变量,然后重定向。我更新了答案。我是通过内存来完成的,所以如果有任何PHP错误,请道歉。它将在抛出new\Exception('error')时停止;如果($errors)不起作用,我在if($errors)之前回显$errors,它返回nothing