Импортировать данные файла Excel в базу данных с веб-сайта maatwebsite, используя очередь в laravel - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь импортировать файл Excel в базу данных, используя maatiswebsite.Для этого я использую очередь, потому что это займет некоторое время для импорта файла.Я хочу показать пользователю быстрое сообщение, что «ваш файл импортируется. Мы сообщим вам, как только это будет сделано».Но не в состоянии это сделать.

QUEUE_DRIVER = база данных

Вот что я сделал до сих пор -
Контроллер -

public function import(Request $request) 
{
    Excel::filter('chunk')->load($request->file('import_file')
            ->getRealPath())->chunk(250, function($reader)
    {
        ImportDistributor::dispatch(new ImportDistributor($reader->toArray()));
    });

    dd('your file is being imported. we will inform you once it is done.');

}    

Работа -

public function handle()
{
    if(isset($this->data) && !empty($this->data))
    {
        foreach($this->data as $data)
        {
            DB::table('user_details')->insert($data);
        }
    }
}    

Модель -

<?php

namespace App\Model;
use Illuminate\Database\Eloquent\Model;

class UserDetailsModel extends Model
{
    protected $table = 'user_details';
}

Я не могу хранить данные в user_details.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Если импорт работает нормально при использовании дисковода синхронизации, это означает, что вам нужно запустить работника очереди :

php artisan queue:work

0 голосов
/ 10 октября 2018

Вам необходимо добавить свойство $fillable в вашей модели и добавить все поля, которые вы хотите сохранить в базу данных

<?php

namespace App\Model;
use Illuminate\Database\Eloquent\Model;

class UserDetailsModel extends Model
{
    protected $table = 'user_details';
    protected $fillable = ["name", "etc", "etc1"];
}

И в Job, измените код на этот.

use App\UserDetailsModel;

public function handle()
{
    if(isset($this->data) && !empty($this->data))
    {
        foreach($this->data as $data)
        {
            UserDetailsModel::insert($data);
        }
    }
}

Попробуйте это.Я думаю, что это решит вашу проблему.

...