Концы строк Laravel Excel import .csv не распознаются

Я пытаюсь обновить таблицу базы данных sql, используя данные файла Excel (.csv) в Laravel, используя Репозиторий Laravel Excel.

Функция My Controller возвращает содержимое файла excel, но только в виде массива из 2 (это должно быть 604).
< br> Поэтому я думаю, что мне придется добавить к моей функции 'конец строки \ t'.
Но я не знаю, как это сделать.



Вот что мне известно на данный момент:

Контроллер

public function uploadExcel()
{
        Excel::load(Input::file('import_file'), function ($reader) {

        foreach ($reader->toArray() as $value) {
            $insert[] = [
            'member_title' => $value->member_title,
            'member_first_name' => $value->member_first_name,
            'member_name_affix' => $value->member_name_affix,
            'member_last_name' => $value->member_last_name,
            'member_private_address' => $value->member_private_address,
            'member_private_zip_code' => $value->member_private_zip_code,
            'member_private_location' => $value->member_private_location,
            'member_private_phone' => $value->member_private_phone,
            'member_private_mobile' => $value->member_private_mobile,
            'member_private_fax' => $value->member_private_fax,
            'member_private_mail' => $value->member_private_mail,
            'member_business_position' => $value->member_business_position,
            'member_business_name' => $value->member_business_name,
            'member_business_address' => $value->member_business_address,
            'member_business_zip_code' => $value->member_business_zip_code,
            'member_business_location' => $value->member_business_location,
            'member_business_area_code' => $value->member_business_area_code,
            'member_business_phone' => $value->member_business_phone,
            'member_business_fax' => $value->member_business_fax,
            'member_business_mobile' => $value->member_business_mobile,
            'member_business_mail' => $value->member_business_mail,
            'member_join_date' => $value->member_join_date,
            'extra' => $value->extra
            ];
        }
    });
    if(!empty($insert)) {
        die(var_dump($insert)); <-- puts out the array for testing
        DB::table('members')->insert($insert);
    }
    return redirect('index.index');
}


Согласно официальной документации, мне пришлось бы добавить это в свой проект чтобы распознать правильные окончания строк:

class UserListImport extends \Maatwebsite\Excel\Files\ExcelFile {
    protected $lineEnding = '\t';
}



Если моя догадка верна и этот фрагмент из документации решит мою проблему:

Где мне создать этот файл, содержащий код из документации?

И мне нужно изменить что-нибудь еще, чтобы этот файл подействовал?


Я новичок в Laravel и буду очень благодарен за любую помощь !!



ОБНОВЛЕНИЕ


Сообщение об ошибке

Класс App \ UserListImport содержит 1 абстрактный метод и поэтому должен быть объявлен абстрактным или реализовывать остальные методы (Maatwebsite \ Excel \ Files \ ExcelFile :: getFile)

app / UserListImport.php

namespace App;

    class UserListImport extends \Maatwebsite\Excel\Files\ExcelFile {
    protected $lineEnding = '\t';

    public function loadExcel() {
        Excel::load(Input::file('import_file'), function ($reader) {

            foreach ($reader->toArray() as $value) {
                $insert[] = [
                'member_title' => $value->member_title,
                'member_first_name' => $value->member_first_name,
                'member_name_affix' => $value->member_name_affix,
                'member_last_name' => $value->member_last_name,
                'member_private_address' => $value->member_private_address,
                'member_private_zip_code' => $value->member_private_zip_code,
                'member_private_location' => $value->member_private_location,
                'member_private_phone' => $value->member_private_phone,
                'member_private_mobile' => $value->member_private_mobile,
                'member_private_fax' => $value->member_private_fax,
                'member_private_mail' => $value->member_private_mail,
                'member_business_position' => $value->member_business_position,
                'member_business_name' => $value->member_business_name,
                'member_business_address' => $value->member_business_address,
                'member_business_zip_code' => $value->member_business_zip_code,
                'member_business_location' => $value->member_business_location,
                'member_business_area_code' => $value->member_business_area_code,
                'member_business_phone' => $value->member_business_phone,
                'member_business_fax' => $value->member_business_fax,
                'member_business_mobile' => $value->member_business_mobile,
                'member_business_mail' => $value->member_business_mail,
                'member_join_date' => $value->member_join_date,
                'extra' => $value->extra
                ];
            }
        });
        if(!empty($insert)) {
            die(var_dump($insert));
            DB::table('members')->insert($insert);
        }
        return redirect('index.index');
    }
}


Контроллер

use Maatwebsite\Excel\Facades\Excel;
use App\UserListImport;

public function uploadExcel()
{
    UserListImport::loadExcel();
}

person Schwesi    schedule 31.08.2016    source источник


Ответы (2)


В документации предполагается, что вы создали новый настраиваемый класс, расширяющий Excelfile.

class UserListImport extends \Maatwebsite\Excel\Files\ExcelFile

означает именно это.

Обычно я предпочитаю добавлять свои собственные папки с именами приложений для всего, что нужно моему приложению.

В этом случае я бы извлек что-нибудь из контроллера и вызвал свой собственный класс для обработки Input::file('import_file'). Этот класс - место, куда нужно поместить этот атрибут, чтобы перезаписать то, как библиотека взаимодействует с файлом.

person phaberest    schedule 31.08.2016
comment
Большое спасибо!!! Допустим, я создаю класс UserListImport в app / UserListImport.php. Тогда как именно мне «извлечь что-нибудь из контроллера» и вызвать этот класс? - person Schwesi; 31.08.2016
comment
Когда вы расширяете другой класс, ваш класс наследует его методы. Я полагаю, вам может просто понадобиться добавить собственный метод nameItWhateverYouWant method и вызвать $this->load() внутри него, иначе parent::load(). Этот load() метод ведет себя точно так же, как Excel::load(), который вы вызвали в своем контроллере. Не имея кода под носом, я не могу быть уверен, попробуйте дать нам отзыв. - person phaberest; 31.08.2016
comment
Не забудьте use App\UserListImport; в верхней части контроллера и назовите его как UserListImport::theMethodNameYouChose(). В UserListImport вы должны поместить его в пространство имен вверху, используя namespace App; - person phaberest; 31.08.2016
comment
Большое вам спасибо за вашу помощь! Теперь я получаю эту ошибку: Class App\UserListImport contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Maatwebsite\Excel\Files\ExcelFile::getFile) - person Schwesi; 31.08.2016
comment
Без спешки! Большое спасибо! - person Schwesi; 31.08.2016

Это \t означает табуляцию (пробел между словами). Для окончания строки используются следующие комбинации символов '\n', '\r\n'. Это зависит от операционной системы. '\n' - для Unix / Linux / Mac OS, а '\r\n' - для семейств Windows.

person Andrej Ludinovskov    schedule 31.08.2016
comment
Спасибо!! Но как мне сказать функции laravel использовать '\ t' в качестве окончания строки? - person Schwesi; 31.08.2016
comment
Зачем тебе это делать? @kringeltorte - person Andrej Ludinovskov; 31.08.2016
comment
Скажем, я хотел бы сказать функции, что '\ n' должно быть концом строки. Как бы я это сделал? - person Schwesi; 31.08.2016