【问题标题】:Storing data in database using laravel queue [duplicate]使用laravel队列将数据存储在数据库中[重复]
【发布时间】:2018-10-11 05:08:16
【问题描述】:

我正在尝试使用 laravel 队列将数据存储在数据库中。我想向用户显示“正在导入您的文件”并希望使用队列存储数据的快速消息。我在 env 文件中使用数据库作为 QUEUE_DRIVER。当我尝试存储数据时,它会在作业表中创建条目,但不会在 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'
                          ];
}

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

【问题讨论】:

  • 你在本地机器上测试吗?
  • @MayuriPansuriya 是的,我正在本地机器上测试它
  • 你启动了队列工作者吗?
  • 是的,我开始了它,但仍然是同样的问题。

标签: php laravel queue jobs


【解决方案1】:

如果您使用队列,您可能正在执行一些您希望Laravel 异步处理的耗时任务。你放入jobs数据库的任务需要LaravelQueue Worker一一获取。

你必须手动调用

$ php artisan queue:work

告诉工匠启动你的队列工作者。

查看Laravel的官方文档:

Laravel Queue Worker

【讨论】:

  • 是使用了 php artisan queue:work 并反映了作业表上的更改,但不在 demo_tbl 中存储数据
  • @Deepak @Deepak php artisan queue:work 调用队列工作者来实际处理作业表中的任务。如果您运行该命令,请检查是否有任何输出表明工作人员正在处理您的作业,如果是,请检查输出是否表明处理成功(并且作业表中的条目将被自动删除)。还要检查作业表以查看尝试字段,以检查队列工作人员是否尝试处理您的任务超出默认限制时间。在这种情况下,请检查您工作中的逻辑,看看您是否做对了。
  • 我运行 php artisan queue:work 它显示 [2018-10-11 05:21:38][998] 正在处理但没有收到任何成功消息。如果我在这种情况下将 queue_driver 更改为同步,它将数据存储在 demo_tbl 中。
  • @Deepak 你能检查你的工作表,看看你的工作表中的条目是否减少了吗? attempts 列在您的工作条目中显示什么,0 或更大?
  • 第一次尝试列的值为 1,但最后为 255。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 2017-11-18
  • 2010-11-07
  • 2012-09-25
相关资源
最近更新 更多