可以使用laravel excel将数据从一张excel表格导入到多个表吗?

时间:2019-01-23 11:09:22

标签: php excel laravel

我们正在创建一个应用程序,用户可以上传一个包含多个表信息的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 :(得分:0)

您可以导入到集合,然后在每行上创建两个模型,而不是导入模型:

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],
            ]);
        }
    }
}

了解更多here

可以通过使用WithMultipleSheets关注项一次导入多个工作表,并进行多次导入,但是据我所知,您不能使用它从一个工作表创建多个导入。