【问题标题】:Maatwebsite 3.1 import multiple model on same methodMaatwebsite 3.1 在同一方法上导入多个模型
【发布时间】:2019-08-08 18:52:51
【问题描述】:

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

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

【问题讨论】:

    标签: laravel maatwebsite-excel excel-import


    【解决方案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',
            ]);
         }
       }
    }
    

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

    【讨论】:

      【解决方案2】:

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

      您遇到的问题是您无法在请求中导入文件两次,check this issue discussing it。您必须先上传文件,然后在两个调用中使用该文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-22
        • 2020-04-03
        • 1970-01-01
        • 2020-12-20
        • 1970-01-01
        相关资源
        最近更新 更多