Импортируйте данные Excel, данные в каждой повторяющейся 5 строк в одну строку в базе данных. Ларавел 5.8 - PullRequest
1 голос
/ 04 июля 2019

У меня есть файл 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 Ответ

1 голос
/ 11 июля 2019

Хорошо, я нашел решение для этого, Мы можем сделать это, проверив имя внутри цикла 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];
           }
      }
...