Импорт Laravel Excel - как получить импортированных пользователей

Мне нужно импортировать пользователей из таблицы Excel. И все отлично, но после импорта мне нужно сделать еще кое-что с этими импортированными пользователями. Как я могу получить их в своем контроллере после импорта?

Я пытаюсь следовать документации Laravel Excel, но она очень загадочна :(

В любом случае у меня есть класс UserImport, как в их примере:

<?php

namespace App\Imports;

use App\User;
use Illuminate\Support\Facades\Hash;
use Maatwebsite\Excel\Concerns\ToModel;

class UsersImport implements ToModel
{
    /**
     * @param array $row
     *
     * @return User|null
     */
    public function model(array $row)
    {
        return new User([
           'name'     => $row[0],
           'email'    => $row[1], 
           'password' => Hash::make($row[2]),
        ]);
    }
}

и в моем контроллере у меня есть:

$import = new UsersImport();
    $import->import(request()->file('xlsfile'));
    if($import->errors()->count())
    {
        dump($import->errors());
    }
    else
    {
        echo 'Success<br>';

        dd($import);
    }

К сожалению, $import содержит вместо моих записей это:

App\Imports\UsersImport {#372 ▼
  #output: null
  #errors: []
}

person Kornel    schedule 11.03.2020    source источник


Ответы (1)


Из документации в разделе Основы импорта

Импорт в массив или коллекцию

Если вы хотите обойти проблемы ToArray или ToCollection и хотите иметь массив импортированных данных в своем контроллере (остерегайтесь производительности!), вы можете использовать метод ::toArray() или ::toCollection().

$array = Excel::toArray(new UsersImport, 'users.xlsx');

$collection = Excel::toCollection(new UsersImport, 'users.xlsx');

В вашем случае вы можете получить прямой доступ к $import->toArray(). Но я не уверен. Попробуй.

person musicvicious    schedule 12.03.2020
comment
$import->toArray(), к сожалению, не работает - он говорит: для начала импорта необходимо передать путь к файлу или UploadedFile. И когда я даю ему такой файл $import-›toArray(request()-›file('xlsfile')); Результат тот же: App\Imports\UsersImport {#372 ▼ #output: null #errors: [] } - person Kornel; 13.03.2020