Подтвердить что ты не робот

Чтение файла excel и загрузка в базу данных Laravel 5

У меня есть этот проект, где я могу загрузить файл excel и прочитать содержимое, а затем загрузить информацию в базу данных. Поэтому я решил использовать библиотеку, чтобы помочь мне, которая превращается в Maatwebsite/Laravel-Excel

Но я пробовал читать документацию http://www.maatwebsite.nl/laravel-excel/docs/import, но я не могу найти тот, который мне нужен.

Например, в моем файле excel в первой строке John, Kennedy, Male который в моей базе данных соответствует First Name, Last Name, Gender. Как я могу его прочитать и загрузить? Кто-нибудь может мне помочь?

Спасибо!

Мой код на данный момент

public function postUploadCsv()
{
    $rules = array(
        'file' => 'required',
        'num_records' => 'required',
    );

    $validator = Validator::make(Input::all(), $rules);
    // process the form
    if ($validator->fails()) 
    {
        return Redirect::to('customer-upload')->withErrors($validator);
    }
    else 
    {
        $file = Input::file('file');
        dd($file);
        exit();
    } 
}
4b9b3361

Ответ 1

учитывая, что ваши имена столбцов таблицы Excel соответствуют именам столбцов базы данных, достаточно

добавить следующий выше класс контроллера,

use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Facades\Input;

и код функции,

public function postUploadCsv()
{
    $rules = array(
        'file' => 'required',
        'num_records' => 'required',
    );

    $validator = Validator::make(Input::all(), $rules);
    // process the form
    if ($validator->fails()) 
    {
        return Redirect::to('customer-upload')->withErrors($validator);
    }
    else 
    {
        try {
            Excel::load(Input::file('file'), function ($reader) {

                foreach ($reader->toArray() as $row) {
                    User::firstOrCreate($row);
                }
            });
            \Session::flash('success', 'Users uploaded successfully.');
            return redirect(route('users.index'));
        } catch (\Exception $e) {
            \Session::flash('error', $e->getMessage());
            return redirect(route('users.index'));
        }
    } 
} 

ОБНОВИТЬ

Предположим, у вас есть более одного листа в книге, у вас будет дополнительный foreach для перебора листов, как показано ниже,

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

     $reader->each(function($sheet) {    
         foreach ($sheet->toArray() as $row) {
            User::firstOrCreate($row);
         }
     });
});

Прочитайте больше

В случае, если вы используете Laravel 5.3 и учитывая, что ваши столбцы таблицы Excel не являются точными

Используйте следующий код для удовлетворения ваших потребностей

/**
 * Import file into database Code
 *
 * @var array
 */
public function importExcel(Request $request)
{
    if($request->hasFile('import_file')){

        $path = $request->file('import_file')->getRealPath();
        $data = Excel::load($path, function($reader) {})->get();

        if(!empty($data) && $data->count()){

            foreach ($data->toArray() as $key => $value) {

                if(!empty($value)){

                    foreach ($value as $v) {        

                        $insert[] = ['title' => $v['title'], 'description' => $v['description']];

                    }
                }
            }

            if(!empty($insert)){
                Item::insert($insert);
                return back()->with('success','Insert Record successfully.');
            }
        }
    }

    return back()->with('error','Please Check your file, Something is wrong there.');

}

Ознакомьтесь с полным руководством здесь

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