Laravel объединяет два CSV без перезаписи одинаковых данных в каждом - PullRequest
0 голосов
/ 29 сентября 2019

В Excel есть функция, которая называется «Вставить специальные -> пропустить пустые ячейки» .. и, по сути, это позволяет вам брать два CSV, каждый из которых содержит одинаковые столбцы, и вставлять разные данные в электронную таблицу безперезапись существующих данных.Мне нужно попытаться повторить это в PHP.

У меня есть 3 машины, каждая из которых используется для проверки студента на разных этапах экзамена.Машина 1 будет иметь столбец данных, такой как «имя = Адам, экзамен1 = проход, экзамен2 = ноль, экзамен3 = ноль».Машина 2 будет иметь «имя = Адам, экзамен1 = ноль, экзамен2 = проход, экзамен3 = ноль», и машина 3, как вы можете догадаться, будет «имя = Адам, экзамен1 = ноль, экзамен2 = ноль, экзамен3 = проход».Теперь в Excel я могу просто скопировать вставить машину 1 в машину 2, используя «пропустить пустое», и это приведет к «имя = Адам, экзамен1 = проход, экзамен2 = проход, экзамен3 = ноль».Затем скопируйте новый файл с компьютера 2 на компьютер 3, и он даст мне полный результат для студентов: «имя = Адам, экзамен1 = сдача, экзамен2 = сдача, экзамен3 = сдача».Однако мне приходится делать это на 10-15 машинах.Я хотел бы найти способ автоматизировать это.

Я пытался использовать этот код в моем блейде:

        <label for="exampleFormControlFile1">CSV Upload</label>
        <input type="file" name="csv_import[]" class="form-control-file" id="exampleFormControlFile1">
        <br/><br/>
        <label for="exampleFormControlFile2">CSV Upload</label>
        <input type="file" name="csv_import[]" class="form-control-file" id="exampleFormControlFile2">
        <br/><br/>

        <input type='submit' name='submit' value='Import' class="btn btn-primary">

Вот мой контроллер:

  public function combineCSV(Request $request){
    $csv = request('csv_import');
    for($i = 0; $i < 3; $i++){
        $path = $request->file($csv[0])->store('excel-files');
        $products = (new FastExcel)->import($request->file($path), function ($line) {
          $student = Student::where('student_id', $line->student_id)->first();
        });
    }

}

Я знаю, что это очень неправильно (очевидно, потому что яполучаю ошибки).Но я еще не знаком с CSV или манипулированием файлами.Я пытаюсь использовать пакет FastExcel на github для laravel, без особой причины.Если есть лучший пакет, я полностью использую его.Но как я могу загрузить более одного файла, отсканировать каждую строку за строкой и сказать «если exam1 == null && csv-> exam1 == null, продолжить, иначе, если exam1 == null && csv-> exam1 == pass, updateзапись».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...