【发布时间】:2015-10-07 05:59:48
【问题描述】:
我正在尝试从其官方文档中学习 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));
}
它工作正常,数据已插入。
在这里,我的问题是:
- 如何将对象发送到队列中?
- 将数据发送到队列以便我们进行处理的最佳方式是什么?
【问题讨论】:
-
这种 Laravel 行为出乎很多人的意料,所以我很高兴看到这里有一个相关的错误报告:github.com/laravel/framework/issues/14526
标签: php laravel laravel-5.1