使用Laravel队列将数据存储在数据库中

时间:2018-10-11 05:08:16

标签: php laravel queue jobs

我正在尝试使用laravel队列将数据存储在数据库中。我想向用户显示一条“您正在导入文件”的快速消息,并想使用队列存储数据。我已经在env文件中将数据库用作QUEUE_DRIVER。当我尝试存储数据时,它会在Jobs表中创建条目,但不会在demo_tbl中存储任何内容。

这是我到目前为止所做的-
控制器

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

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

工作-

<?php
namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

use App\Model\DemoTableModel;

use DB;

class ImportDistributor implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
   protected $data;

    public function __construct(array $request)
    {
        $this->data = $request;
    }

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

模型

<?php

namespace App\Model;

use Illuminate\Database\Eloquent\Model;

class DemoTableModel extends Model
{
    protected $table    = 'demo_tbl';
    protected $fillable = [
                              'name', 
                              'city'
                          ];
}

任何帮助将不胜感激。
谢谢。

1 个答案:

答案 0 :(得分:1)

如果您使用队列,则可能正在执行一些耗时的任务,希望Laravel异步处理。您放入工作数据库中的任务必须由Laravel的{​​{1}}一一读取。

您必须手动致电

Queue Worker

告诉工匠开始您的队列工作器。

请查看$ php artisan queue:work 的官方文档:

Laravel Queue Worker