Foreach循环在Laravel队列作业中不起作用

时间:2018-07-27 15:52:46

标签: php laravel-5 foreach queue jobs

我正在尝试将数据发送到Web Api ...这个想法是一张一张地装载很多纸。因此,我创建了一个工作来将此工作表发送给curl函数,该函数负责在DB上插入数据。我正在将这样的数组传递给我的工作:

0 => array:5 [
"xls_path" => "http://airviro.r9.cl/dev-sma/uploads/TEST_SO2_NO_PM101532702117.xlsx"
"sheet" => "Registros Crudos NO"
"estacion" => "DV1"
"tipo_dato" => "M"
"cont" => "0002"
]

1 => array:5 [
"xls_path" => "http://airviro.r9.cl/dev-sma/uploads/TEST_SO2_NO_PM101532702117.xlsx"
"sheet" => "Registros Crudos SO2"
"estacion" => "DV1"
"tipo_dato" => "M"
"cont" => "0001"]

2 => array:5 [
"xls_path" => "http://airviro.r9.cl/dev-sma/uploads/TEST_SO2_NO_PM101532702117.xlsx"
"sheet" => "Registros Crudos MP10"
"estacion" => "DV1"
"tipo_dato" => "M"
"cont" => "PM10"
 ]

每个位置都包含工作表信息...因此负责处理此数组的作业函数是:

public function handle()
{

    $total_hojas = count($this->hojas["hojas"]);

    $i=1;
    $porcentaje = 0;

    foreach ($this->hojas["hojas"] as $key => $value) {

      $response = Insert::insertData($value);
      $response = json_decode($response,true);

      if($response["code"] == 0){

        $porcentaje = $porcentaje + ($i/$total_hojas) * 100;

        #actualizar estado de carga de las hojas en bd

        DB::table('importacion')
          ->where('id', $this->hojas["import"])
          ->update(['comentario' => "Porcentaje de carga completado: $porcentaje%"]);

        continue;
        #$fila = DB::table('importacion')->select('*')->where('id','=',$this->hojas["import"])->get();
        #dd($fila);
      }
      else{

        DB::table('importacion')
          ->where('id', $this->hojas["import"])
          ->update(['comentario' => $response["msg"]]);
        break;
      }


      $i++;
    }
}

带有工作表数据的数组毫无问题地到达了我的工作的句柄功能...数组的第一个位置发送到curl函数...但是随后当foreach循环必须继续数组的下一个位置时并将其发送到服务..它只是不断循环遍历数组的位置0 ...服务在操作数组位置后返回一个确定的消息..所以当处理第一个消息时,我正在继续$ response变量没问题,它的第一张工作表数据保存在DB上...所以最终结果是,我不断收到第一条响应消息,并且foreach循环不处理其他位置...任何帮助??感谢您的宝贵时间。

更新!

curl函数上的$ response变量在处理数组的第二个位置时不返回任何内容...这是我的curl函数:

class Insert
{
protected $cliente;

public function __construct()
{
    #Se inicializa la conecccion al servicio web
    $this->cliente = curl_init('https://validar.r9.cl/load_avdata_xls');

}

public function insertData($data){

  print_r($data);
  curl_setopt($this->cliente, CURLOPT_FRESH_CONNECT, TRUE);
  curl_setopt($this->cliente, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($this->cliente, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($this->cliente, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($this->cliente, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

  $response = curl_exec($this->cliente);
  print_r($response);
  curl_close($this->cliente);
  return $response;

}

 }

0 个答案:

没有答案