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

时间:2019-07-04 09:53:34

标签: excel laravel-5.8 maatwebsite-excel

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

excel

下面是我的表结构

Database table structure

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

Resut

我如何在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.');

}

UserImports

  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],
    ]);
   }
 }

1 个答案:

答案 0 :(得分:1)

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

    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];
           }
      }