2016-07-25 85 views
0

我想在laravel 5.2導入CSV文件,MATLAB/Excel中,驗證導入CSV在Laravel

價格應該是整數,但是當有人輸入的價格爲字符串,我需要驗證它。

這是我的代碼:

Excel::filter('chunk')->load($path . $filename)->chunk(1000, function($results) { 
    foreach ($results as $import_data) { 
     $validation = Validator::make($import_data->toArray(), [ 
      'code' => 'required|alpha', 
      'name' => 'alpha', 
      'number' => 'alpha', 
      'price' => 'numeric', 
      'pages' => 'numeric', 
      'delivery_id' => 'numeric' 
     ]); 
     if($validation->fails()) { 
      return back(); 
     } 

     if($binder = Binder::where('code', $import_data->code)->first()) { 
      $binder->update([ 
       'price' => $import_data->price, 
       'pages' => $import_data->pages 
      ]); 
     } else { 
      Binder::create([ 
       'code' => $import_data->code, 
       'name' => $import_data->name, 
       'number' => $import_data->number, 
       'price' => $import_data->price, 
       'pages' => $import_data->pages, 
       'delivery_id' => $import_data->delivery_id 
      ]); 
     } 
    } 
}); 

導入CSV之後,我回背()是不工作時,控制器還在做的foreach,如何使我的驗證?

回答

0

您從chunk()方法返回,然後繼續調用相同chunk()方法的下一次迭代,依此類推。我建議將整個事件包裝在try-catch-block中,然後拋出異常。

編輯:這樣的:

try { 
    Excel::filter('chunk')->load($path . $filename)->chunk(1000, function($results) { 
     foreach ($results as $import_data) { 
      // ... 
      if($validation->fails()) { 
       throw new Exception(); 
      } 
      // ... 
     } 
    )}; 
} catch (Exception $e) { 
    return back(); 
} 
+0

,所以我必須用另一塊?是的,我正在使用嘗試抓住但嘗試抓住沒有得到異常,我沒有得到錯誤原因。 –

+0

不,重點是你不應該使用更多的塊。這個問題是它一直持續到下一個塊。我會將我的意思添加到我的帖子中。 –