将每个重复 5 行中给定的 excel 数据导入数据库中的一行。 Laravel 5.8

Import excel data given in each repeated 5 rows to one row in database. Laravel 5.8

我有一个包含以下数据的 excel 文件。以下是2个用户的数据。每个用户有 5 行详细信息。我需要将以下内容导入数据库中的 2 行。

下面是我的table结构

我需要的是,我需要以这种方式导入 excel,在 table 中应该只有 2 行,如下所示。

如何在 Laravel 5.8 中执行此操作? 这是我的控制器代码

public function importMovementFile (Request $request){

    $this->validate($request, [
           'mcafile'  => 'required|mimes:xls,xlsx,ods'
          ]);

    $path = $request->file('mcafile')->getRealPath();

    $data = \Excel::import(new UsersImport,$path);

    return back()->with('success', 'Excel Data Imported successfully.');

}

用户导入

  use Maatwebsite\Excel\Row;
  use Maatwebsite\Excel\Concerns\OnEachRow;

  class UsersImport implements OnEachRow
   {
    public function onRow(Row $row)
    {
    $rowIndex = $row->getIndex();
    $row      = $row->toArray();

   UploadMovAnalysisDataFiles::create([
        'member_name' => $row[0][$rowIndex],
    ]);
   }
 }

好的,我找到了解决方法, 我们可以通过在 for 循环中检查名称来做到这一点。首先检查name是否为空,如果为空则将first name放入name变量中并循环遍历。将相应名称的每个分数存储在一个对象中。当出现另一个名字时,插入第一个详细信息并遍历下一个,依此类推。

    public function insertExcel
    {
    $obj= new UploadMovAnalysisDataFiles();
    $name ='';
    for($i=1;$i<$rows->count();$i++){

        if($name==''){
            $name = $rows[$i][0];
            $id = $rows[$i][1];   
            $date = date('Y-m-d h:i:s', strtotime($rows[$i][2])); 
            $visit_date = $date;
            //function call
            score($rows[$i][3],$rows[$i][4];


    }elseif($name==$rows[$i][0]){
            //function call
            score($rows[$i][3],$rows[$i][4];

    }else{

        UploadMovAnalysisDataFiles::create([
        'member_name' => $name,
        'mov_analysis_tag_id' => $id ,
        'visit_date' => $date,
        'fitness_score' => $obj->fscore,
        'knee_score' => $obj->kscore,
        'hip_score' => $obj->hscore,
        'core_score' => $obj->cscore,
        'shoulder_score' => $obj->sscore,


    ]);
        $name = $rows[$i][0];
        $id = $rows[$i][1];   
        $date = date('Y-m-d h:i:s', strtotime($rows[$i][2])); 
        $visit_date = $date;
        //function call
        score($rows[$i][3],$rows[$i][4]);
    }
    }



   UploadMovAnalysisDataFiles::create([
        'member_name' => $name,
        'mov_analysis_tag_id' => $id ,
       'visit_date' => $date,
        'fitness_score' => $obj->fscore,
        'knee_score' => $obj->kscore,
        'hip_score' => $obj->hscore,
        'core_score' => $obj->cscore,
        'shoulder_score' => $obj->sscore,


    ]);

   }

函数将每个分数保存在一个对象中。

     function score($rows[$i][3],$rows[$i][4){
           if($rows[$i][3]== 'VSFitness_Score'){
               $obj->fscore =  $rows[$i][4];
           }if($rows[$i][3]== 'knee_Score'){
               $obj->kscore =  $rows[$i][4];
           }if($rows[$i][3]== 'Hip_Score'){
               $obj->hscore =  $rows[$i][4];
           }if($rows[$i][3]== 'Core_Score'){
               $obj->cscore =  $rows[$i][4];
           }if($rows[$i][3]== 'Shoulder_Score'){
               $obj->sscore =  $rows[$i][4];
           }
      }