Maatwebsite 3.1 以相同的方法导入多个模型

Maatwebsite 3.1 import multiple model on same method

嗨!我只是想使用 import excel package using maatwebsite 。我已经成功地使用它 horrayyy!!但突然我想尝试导入 1 个文件 excel 并将其插入到两个不同的模型中。我试过使用一个 importClass 并制作 return new model Siswareturn 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',
        ]);
     }
   }
}

您可以导入集合,并在每一行上创建两个模型,而不是导入模型。