Maatwebsite 3.1 以相同的方法导入多个模型
Maatwebsite 3.1 import multiple model on same method
嗨!我只是想使用 import excel package using maatwebsite 。我已经成功地使用它 horrayyy!!但突然我想尝试导入 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。但是它return错误
The file "siswa10duplicate.xls" was not uploaded due to an unknown
error.
(这是我试过的控制器)
public function processImportSiswa(Request $request)
{
Excel::import(new PengunjungImport, $request->file('import_siswa'));
Excel::import(new UsersImport, $request->file('import_siswa'));
return back();
}
如何导入一个 excel 文件并将其插入多个 table 工作?请帮我提供一些资源或示例代码更好:)
一个函数不能有两个后跟 return,因为函数将在第一个 return 执行时结束。您尝试的第二种方法是要走的路,为每个模型创建一个导入。
您现在遇到的问题是您无法在请求中两次导入文件,check this issue discussing it。您必须先上传文件,然后在两次调用中都使用该文件。
将导入 Class 更改为:
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',
]);
}
}
}
您可以导入集合,并在每一行上创建两个模型,而不是导入模型。
嗨!我只是想使用 import excel package using maatwebsite 。我已经成功地使用它 horrayyy!!但突然我想尝试导入 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。但是它return错误
The file "siswa10duplicate.xls" was not uploaded due to an unknown error.
(这是我试过的控制器)
public function processImportSiswa(Request $request)
{
Excel::import(new PengunjungImport, $request->file('import_siswa'));
Excel::import(new UsersImport, $request->file('import_siswa'));
return back();
}
如何导入一个 excel 文件并将其插入多个 table 工作?请帮我提供一些资源或示例代码更好:)
一个函数不能有两个后跟 return,因为函数将在第一个 return 执行时结束。您尝试的第二种方法是要走的路,为每个模型创建一个导入。
您现在遇到的问题是您无法在请求中两次导入文件,check this issue discussing it。您必须先上传文件,然后在两次调用中都使用该文件。
将导入 Class 更改为:
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',
]);
}
}
}
您可以导入集合,并在每一行上创建两个模型,而不是导入模型。