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

时间:2019-03-18 11:54:39

标签: laravel maatwebsite-excel excel-import

嗨!我只是尝试使用maatwebsite使用import excel软件包。我已经成功使用它了!但是突然之间,我想尝试导入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。但是返回错误

  

由于未知,文件“ 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文件并将其插入到多个表中?请帮助我提供一些资源或更好的示例代码:)

2 个答案:

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

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