1

嗨!我只是尝试使用maatwebsite使用 import excel 包。我已经成功使用它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。但它返回错误

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

4

2 回答 2

3

将导入类更改为此:

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

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

于 2020-10-11T14:22:26.143 回答
1

一个函数不能有两个跟随返回,因为该函数将在执行第一个返回时结束。您尝试的第二种方法是要走的路,为每个模型创建一个导入。

您遇到的问题是您无法在请求中两次导入文件,请检查此问题讨论它。您必须先上传文件,然后在两个调用中使用该文件。

于 2019-03-18T12:06:11.353 回答