2017-07-12 3 views
1

this libアップロードの動作は素晴らしいです。私は優れた物の数を持っており、私はそれらを通り抜けて、私が望むものを何でもします。Laravel:アップロード数をカウントして返します。

質問はExcelのアップロード中です。特定のオブジェクトが既に存在するかどうかを確認する必要があります。そうでない場合は$rejected変数を増やしてください。$uploaded変数を作成して増やしてください。その結果、私は結果を返信したいと思います:アップロードされた人数と拒否された人は何人ですか?そのようなことをする最善の方法は何ですか?関数内の変数にはアクセスできないことは明らかです。ここでベストプラクティスは何ですか?

public function uploadUsingFile($file) 
    { 
     $rejected = 0; 
     $uploaded = 0; 

     Excel::load($file, function ($reader) { 


     foreach ($reader->toArray() as $row) 
     { 

      $plateAlreadyExist = Plate::where('serial_number', $row['plate_serial_number'])->exists(); 

      if ($plateAlreadyExist) { 
       $rejected += 1;continue; 
      } 

      $supplier   = Supplier::firstOrCreate(['name' => $row['supplier_name']]); 
      $statusName  = EquipmentStatusCode::firstOrCreate(['name' => $row['status_name']]); 
      $plateType   = PlateType::firstOrCreate(['name' => $row['plate_type_name']]); 
      $process   = Process::firstOrCreate(['name' => $row['process_name']]); 
      $project   = Project::firstOrCreate(['name' => $row['project_name']]); 
      $plateQuality  = PlateQuality::firstOrCreate(['name' => $row['plate_quality']]); 
      $wafer    = Wafer::firstOrCreate(['serial_number' => $row['wafer_serial_number']]); 

      $data = [ 
       'serial_number'   => $row['plate_serial_number'], 
       'crc_code'     => $row['crc_code'], 
       'supplier_id'    => $supplier['id'], 
       'equipment_status_code_id' => $statusName['id'], 
       'plate_type_id'   => $plateType['id'], 
       'process_id'    => $process['id'], 
       'project_id'    => $project['id'], 
       'plate_quality_id'   => $plateQuality['id'], 
       'wafer_id'     => $wafer['id'], 
       'created_by'    => Auth::user()->id, 
      ]; 

      if($data) 
      { 
       Plate::create($data); 
       $uploaded += 1; 
      } 
      } 


     }); 
return [ 'uploaded' => $uploaded, 'rejected' => $rejected ]; 
    } 

答えて

0

あなたはuseキーワードを使用して閉鎖に変数への参照を渡すことができます。

... 
Excel::load($file, function ($reader) use(&$rejected, &$uploaded){ 
... 
} 

Anonymous Functions

+0

私はこの方法を試してみました。それは何らかの理由で機能しません。 – user3641381

+0

答えを更新しましたが、 '&'演算子を使って変数を参照渡ししましたか? – Yat23

+0

ありがとう!これはうまくいくようです。あなたの答えに '&'はこれと何をしなければならないのかを気にしていますか? – user3641381

関連する問題