嗨!我只是尝试使用maatwebsite使用import excel软件包。我已经成功使用它了!但是突然之间,我想尝试导入1个excel文件并将其插入两个不同的模型。我尝试使用一个importClass并像这样制作return new model Siswa
和return new model User
(这是我尝试过的importClass)
namespace App\Imports;
use App\Siswa;
use Maatwebsite\Excel\Concerns\ToModel;
class PengunjungImport implements ToModel
{
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
return new Siswa([
'namalengkap' => $row[0],
'kelas' => $row[1],
'jenkel' => $row[2],
'status' => $row[3],
'contact' => $row[4],
]);
return new User([
'name' => $row[0],
'email' => $row[5],
'password' => 'siswasmkn10',
]);
}
}
但是它仅适用于第一个模型(Siswa)。同样,如果我将return new User
更改为第一个,将return new Siswa
更改为第二个,则仅适用于第一个模型(用户)。
我也尝试过在一种方法中导入两个不同的importClass。但是返回错误
由于未知,文件“ siswa10duplicate.xls”未上传 错误。
(这是我尝试的控制器)
public function processImportSiswa(Request $request)
{
Excel::import(new PengunjungImport, $request->file('import_siswa'));
Excel::import(new UsersImport, $request->file('import_siswa'));
return back();
}
如何导入一个Excel文件并将其插入到多个表中?请帮助我提供一些资源或更好的示例代码:)
答案 0 :(得分:1)
在函数上不能有两个跟随的return,因为函数将在执行第一次return时结束。您尝试的第二种方法是使用的方法,为每个模型创建一个导入。
您当时遇到的问题是,无法在请求check this issue discussing it中两次导入文件。您必须先上传文件,然后在两个调用中都使用该文件。
答案 1 :(得分:1)
将导入类更改为此:
namespace App\Imports;
use App\User;
use App\Siswa;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
class PengunjungImport implements ToCollection
{
public function collection(Collection $rows)
{
foreach ($rows as $row)
{
Siswa::create([
'namalengkap' => $row[0],
'kelas' => $row[1],
'jenkel' => $row[2],
'status' => $row[3],
'contact' => $row[4],
]);
User::create([
'name' => $row[0],
'email' => $row[5],
'password' => 'siswasmkn10',
]);
}
}
}
您可以导入到集合,并在每行上创建两个模型,而不是导入模型。