Можно ли импортировать данные в несколько таблиц из одного листа Excel, используя Laravel Excel? - PullRequest
0 голосов
/ 23 января 2019

Мы создаем приложение, в котором пользователь может загрузить файл Excel, содержащий информацию для нескольких таблиц.(Смотрите скриншот ниже, например).Можно ли разделить эти данные и создать несколько моделей для импорта в базу данных с помощью laravel excel?Если нет, есть ли другой пакет, который вы бы порекомендовали использовать?

Поправьте меня, если я ошибаюсь, но, насколько я понимаю, в контроллере может быть только одна модель для импорта.

Контроллер:

class ImportsController
{
    public function import()
    {
        Excel::import(new DataImport, 'testSheet.xlsx'); //only allows for one model

        return redirect('/')->with('success', 'All good!');
    }
}

Импорт:

class DataImport implements ToModel
{
    public function model(array $row)
    {
        // need way to create and return multiple models
        return new Data([

        ]);
    }
}

Маршрут:

Route::get('/import', 'ImportsController@import');

First row is table name, second row is field name, all following rows are data

Первая строка - имя таблицы, вторая строка - имя поля, все следующие строки -данные

1 Ответ

0 голосов
/ 23 января 2019

Вместо импорта в модель вы можете импортировать в коллекцию и создать две модели в каждой строке:

namespace App\Imports;

use App\EmployeeType;
use App\Contact;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;

class EmployeesImport implements ToCollection
{
    public function collection(Collection $rows)
    {
        foreach ($rows as $row) 
        {
            EmployeeType::create([
                'name' => $row[1],
            ]);

            Contact::create([
                'institution' => $row[3],
                'type' => $row[4],
                'address' => $row[5],
            ]);
        }
    }
}

Подробнее здесь

Можно импортировать несколько листов одновременно с несколькими импортами, используя проблему WithMultipleSheets , но, насколько я знаю, вы не можете использовать это для создания нескольких импортов из одного листа.

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