You can add jobs to an already dispatched batch:
$pending_batch = Bus::batch([
new App\Jobs\TestJob(1),
new App\Jobs\TestJob(2),
new App\Jobs\TestJob(3),
]);
$dispatched_batch = $pending_batch->dispatch();
$dispatched_batch->add(new App\Jobs\TestJob(4));
$dispatched_batch->add(new App\Jobs\TestJob(5));
$dispatched_batch->add(new App\Jobs\TestJob(6));
Be aware you should ->add() on dispatched batch object, not pending! Otherwise new jobs will not be queued.
// TestJob
public function __construct(private int $counter) { }
public function handle(): void
{
Log::info('dispatched ' . $this::class . ', counter: ' . $this->counter);
}
in log:
[2025-09-02 11:11:43] local.INFO: dispatched App\Jobs\TestJob, counter: 1
[2025-09-02 11:11:43] local.INFO: dispatched App\Jobs\TestJob, counter: 2
[2025-09-02 11:11:44] local.INFO: dispatched App\Jobs\TestJob, counter: 3
[2025-09-02 11:12:16] local.INFO: dispatched App\Jobs\TestJob, counter: 4
[2025-09-02 11:12:16] local.INFO: dispatched App\Jobs\TestJob, counter: 5
[2025-09-02 11:12:17] local.INFO: dispatched App\Jobs\TestJob, counter: 6