我正在尝试使用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'
];
}
任何帮助将不胜感激。
谢谢。
答案 0 :(得分:1)
如果您使用队列,则可能正在执行一些耗时的任务,希望Laravel
异步处理。您放入工作数据库中的任务必须由Laravel
的{{1}}一一读取。
您必须手动致电
Queue Worker
告诉工匠开始您的队列工作器。
请查看$ php artisan queue:work
的官方文档: