Laravel:计算上传次数并返回

时间:2017-07-12 10:14:44

标签: php laravel file-upload

使用this lib上传效果很好。我有一些excel中的对象,我会通过它们做任何我想做的事。

问题是在上传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 ];
    }

1 个答案:

答案 0 :(得分:0)

您可以使用use关键字将对变量的引用传递到闭包中:

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

Anonymous Functions