我正在尝试从 Laravel 的官方文档中学习数据库队列。我已经按照文档中给出的配置完成了设置。
这里是我的工作:
<?php
namespace App\Jobs;
use App\SearchLog;
use App\Jobs\Job;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Bus\SelfHandling;
use Illuminate\Contracts\Queue\ShouldQueue;
class SendTicket extends Job implements SelfHandling, ShouldQueue
{
use InteractsWithQueue, SerializesModels;
protected $log;
protected $searchLog = array();
public function __construct(SearchLog $log , $data = array())
{
$this->log = $log;
$this->searchLog = $data;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$this->log->create($this->searchLog);
}
在我的控制器中,我这样调用
public function store(Request $request)
{
$searchLog = array();
// searchLog contains the data to be inserted into database
$log = new SearchLog();
$this->dispatch(new SendTicket($log , $searchLog));
}
当我运行php artisan queue:listen
时,我会遇到以下错误:
[Illuminate\Database\Eloquent\ModelNotFoundException]找不到模型[App\SearchLog]的查询结果。
但是,当我像这样编辑工作时:
//only edited code
public function __construct($data = array())
{
$this->searchLog = $data;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
SearchLog::create($this->searchLog);
}
当像这样调用时
public function store(Request $request)
{
$searchLog = array();
// searchLog contains the data to be inserted into database
$this->dispatch(new SendTicket($searchLog));
}
它很好用并且数据已插入。
我的问题是:
- 如何将对象发送到队列?
- 最佳的发送数据到队列的方法是什么,以便我们可以处理它?