目次

ジョブ名の取得

まず、どのジョブが実行されたのかを確認するには、3 番目の引数の $data から該当のジョブクラスを特定します。

ジョブのクラス名だけであれば、強引に以下で取得できなくもないですが、$job 変数からあっさり取れるってこともあるかも。

$command = unserialize($data['data']['command']);
$class_name = get_class($command);
$job_name = str_replace('App\\Jobs\\', '', $class_name);

っと思ってみたのですが、$job のオブジェクトにはそのような振る舞いは実装されていないので、$command からジョブのクラスで用意した実装を活かすのが良さそうです。

例えば、各ジョブのクラスに必要な情報が取得できるような public なメソッドを実装しておけば、上記 $command 変数から参照が可能になります。

これを利用して履歴として残しておきたい情報を受け取るのも 1 つの方法かなと思います。

// 該当のジョブクラスから必要な情報を受け取る
$log = $command->getHoge();
echo $log['id'] . PHP_EOL;
echo $log['name'] . PHP_EOL;
// ジョブクラスには必要な情報を渡すメソッドを実装しておく
class HogeJob extends Job implements ... {

    private $log;

    (省略)

    public function handle() {

        (省略)

        // 処理の最後に必要な情報を設定
        $this->log['id'] = $id;
        $this->log['name'] = $name;
    }

    public function getHoge() {
        return $this->log;
    }

Tips記事一覧

新着記事一覧です。

関連記事一覧

「LaravelでQueueのジョブ完了イベントを使ってログ履歴を残す」に関連した記事一覧です。

TOP