我们正在创建一个应用程序,用户可以上传一个包含多个表信息的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');
第一行是表名,第二行是字段名,接下来的所有行都是数据
答案 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关注项一次导入多个工作表,并进行多次导入,但是据我所知,您不能使用它从一个工作表创建多个导入。