Laravel 7.6 maatawebsite 3.1 excel import не сохраняет данные в datatable - PullRequest
0 голосов
/ 28 мая 2020

Я пытался загрузить Excel в свою таблицу данных, но не работал. Я получаю данные сообщения об успешном завершении, но записи Excel не сохраняются.

Я тоже следовал инструкциям по этим ссылкам: https://www.studentstutorial.com/laravel/import https://www.webslesson.info/2019/02/import-excel-file-in-laravel.html

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

//Save the File
    if($request->hasFile('file'))
    {
        // Get the file with extension
        $filenameWithExt = $request->file('file')->getClientOriginalName();
        //Get the file name
        $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
        //Get the ext
        $extension = $request->file('file')->getClientOriginalExtension();
        //File name to store
        $fileNameToStore = $filename.'_'.time().'.'.$extension;
        //Upload File
        $path = $request->file('file')->storeAS('public/excels', $fileNameToStore);


    }

    $this->validate($request, [
        'file' => 'required|mimes:xlsx,xls',
    ]);


    $data = Excel::import(new Product, $path);

    foreach ($data as $row) {

        $arr[] = [
            'Title' => $row->title,
            'Text' => $row->text,
            'Slug' => $row->slug,
            'Brand_id' => $row->brand_id,
            'Category_id' => $row->category_id,
            'Image' => $row->image,
        ];

            if (!empty($arr)) {
                DB::table('products')->insert($arr);
            }
        }


    return back()->with('success', 'Products Added');

Моя форма:

<form role="form" method="POST" action="{{ action('ProductsController@import')}}" enctype="multipart/form-data">
                            @csrf
                            <div class="input-group mb-3 shadow">
                                <input type="file" name="file" class="btn btn-dark" title="Select File">
                                <button type="submit" class="btn btn-success rounded-0">Upload</button>
                            </div>
                        </form>

1 Ответ

0 голосов
/ 28 мая 2020

Через некоторое время я смог решить эту проблему сам. Я создал новый контроллер импорта и внес это изменение в ProductsController@import

Изменение, которое я сделал в своем контроллере:

$products = Excel::toArray(new ProductsImport(), $request->file('file'));

    foreach($products[0] as $row) {
        //  dd($row[1].' '.$row[2]);
        $arr[] = [
            // If uncomment this id from here, remove [0] from foreach
            // 'id' => $row[0], 
            'image' => $row[1],
            'title' => $row[2],
            'slug' => $row[3],
            'text' => $row[4],
            'brand_id' => $row[5],
            'category_id' => $row[6],
        ];
    }
    // dd($products);

    if(!empty($arr)){
        DB::table('products')->insert($arr);
    }

    return back()->with('success', 'Products Added');

Теперь файл сохраняется в public / excels, а данные импортируются в datatable.

...