使用Laravel中的队列使用maatwebsite导入数据库中的excel文件数据

时间:2018-10-10 10:49:43

标签: php laravel queue maatwebsite-excel

我正在尝试使用maatiswebsite将excel文件导入数据库。为此,我正在使用队列,因为导入文件需要一些时间。我想向用户显示一条快速消息,“您的文件正在导入。完成后我们会通知您”。但无法做到。

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 :(得分:1)

您需要在模型中添加$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);
        }
    }
}

尝试一下。我认为这可以解决您的问题。

答案 1 :(得分:1)

如果在使用同步驱动器时导入工作正常,则意味着您需要run the queue worker

php artisan queue:work