How to Chain Bus::chain() in laravel

7.5k Views Asked by At

I have three Laravel Parent jobs name

        AutoPOChargeCalculation::dispatch($invoice_id, $user_id, $notify)->onQueue('invoice');
        AutoSOChargeCalculation::dispatch($invoice_id, $user_id, $notify)->onQueue('invoice');
        AutoSPChargeCalculation::dispatch($invoice_id, $user_id, $notify)->onQueue('invoice');

inside Each of them calling child jobs with for loop


 foreach ($objects as  $object) {

            $jobs[] = new CalculateSingleSaleOrderCharge($model, $object, $user_id, $notify, $i, $total_objects);
         $i ++;
        }
        Bus::chain($jobs)->onQueue('invoice')->dispatch();
    }
 foreach ($objects as  $object) {

            $jobs[] = new CalculateSinglePurchaseOrderCharge($model, $object, $user_id, $notify, $i, $total_objects);
         $i ++;
        }
        Bus::chain($jobs)->onQueue('invoice')->dispatch();
    }

 foreach ($objects as  $object) {

            $jobs[] = new CalculateSingleStoragePeriodCharge($model, $object, $user_id, $notify, $i, $total_objects);
         $i ++;
        }
        Bus::chain($jobs)->onQueue('invoice')->dispatch();
    }

Now I am thinking to removed parent jobs and Chained the all child jobs bus


 Bus::chain($jobs)->onQueue('invoice')->dispatch()->withChain(
 Bus::chain($jobs)->onQueue('invoice')->dispatch())->withChain(
 Bus::chain($jobs)->onQueue('invoice')->dispatch());


Is that Possible?

1

There are 1 best solutions below

0
On

With new Laravel 8 update you can now send a batch of jobs to the queue, in addition to that, you can also batch chained jobs.

use App\Jobs\ReleasePodcast;
use App\Jobs\SendPodcastReleaseNotification;
use Illuminate\Bus\Batch;
use Illuminate\Support\Facades\Bus;

Bus::batch([
    [
        new ReleasePodcast(1),
        new SendPodcastReleaseNotification(1),
    ],
    [
        new ReleasePodcast(2),
        new SendPodcastReleaseNotification(2),
    ],
])->then(function (Batch $batch) {
    // ...
})->dispatch();

Check it out here for the documentation. Chains Within Batches - Laravel 8