iT邦幫忙

0

laravel 5.2 quene dispatch 問題

請問我有一個Job 
在Job當中定義了__construct(User $User,Collection $Merch)

在laravel 5.6版本時候使用quene 可以使用
Job:dispatch($User,$Merch); //傳入成功

在laravel 5.2版本請問是否能使用Job:dispatch的方式去呼叫呢?

看文檔說明使用的是
dispatch(new Job($User)); //在一個參數的情況下,這樣是可以運行的,

但現在有兩個參數需要傳入的情況下是需要怎麼使用呢?
dispatch(new Job($User,$Merch)); //會跳出Error

//也會跳出Error
$job = (new Job($User,$Merch));
$this->dispatch($job);

1 個回答

0
q00153
iT邦新手 4 級 ‧ 2018-06-07 10:02:03
最佳解答

@@~俺測試可以用多個參數
有沒有錯誤訊息可以看呢?

測試如下

<?php

namespace App\Jobs;

省略...
use Illuminate\Support\Collection;

class test implements ShouldQueue
{
    use InteractsWithQueue, Queueable, SerializesModels;

    private $parm1 = null;
    private $parm2 = null;

    省略...
    public function __construct(Collection $parm1, Collection $parm2)
    {
        $this->parm1 = $parm1;
        $this->parm2 = $parm2;
    }

    省略...
}

使用

省略...
use App\Jobs as Jobs;
use Illuminate\Foundation\Bus\DispatchesJobs;

class MyController extends Controller
{
    use DispatchesJobs;
    省略...
    public function testQueue()
    {
        $parm1 = collect([1, 2, 3]);
        $parm2 = collect([4, 5, 6]);

        $job = (new Jobs\test($parm1, $parm2));
        $this->dispatch($job);
    }
}

查看資料庫在 jobs 的 table 確實記錄進去了
https://ithelp.ithome.com.tw/upload/images/20180607/20092441F0IiYI8ykh.png

補充 我用的是 Laravel 5.2 版測試 @@~

我是參照這邊的做法來做的
laravel 5.2:https://laravel.tw/docs/5.2/queues

namespace App\Jobs;

use App\User;
use App\Jobs\Job;
use Illuminate\Contracts\Mail\Mailer;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendReminderEmail extends Job implements ShouldQueue
{
    use InteractsWithQueue, SerializesModels;

laravel 5.6 寫法範例是

namespace App\Jobs;

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

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

比較了一下您的寫法跟laravel官方文件的任務類別結構的範例,
看起來是因為我同時繼承了Job,且又同時use Queueable導致此問題,
在laravel 5.2中 App\Jobs\Job.php檔案就已經有use Queueable;

導致出現
[ErrorException]
App\Jobs\Job and Illuminate\Bus\Queueable define the same property ($connection) in the composition of App\Jobs\SendMerchandiseNewslet
terJob. This might be incompatible, to improve maintainability consider using accessor methods in traits instead. Class was composed

將以下寫法的 extends Job 或者 use Queueable拿掉其中一個,就可以正常運行了,感謝您。

class SendMerchandiseNewsletterJob extends Job implements ShouldQueue
{
    use InteractsWithQueue, Queueable, SerializesModels;

我要發表回答

立即登入回答