Usage
Let's build our first Haystack. Start preparing your jobs by adding the StackableJob interface and Stackable trait. These will make them compatible with Haystack, however, you can still dispatch the jobs on their own with the trait and interface added.
<?php
namespace App\Jobs;
use Sammyjo20\LaravelHaystack\Contracts\StackableJob;
use Sammyjo20\LaravelHaystack\Concerns\Stackable;
class ProcessPodcast implements ShouldQueue, StackableJob
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, Stackable
Now import the Haystack model and then call the build
static function on it. This will provide you with an instance of the HaystackBuilder class which can be used to build your haystack. You can then use the addJob
method to add jobs to the Haystack.
<?php
use Sammyjo20\LaravelHaystack\Models\Haystack;
Haystack::build()
->addJob(new RecordPodcast)
->addJob(new PublishPodcast)
->addJob(new TweetAboutPodcast);
Dispatching Haystacks
Finally, use the dispatch
method to dispatch the haystack onto the queue connection that you have specified in your application's config. See here for dispatching on custom connections.
<?php
use Sammyjo20\LaravelHaystack\Models\Haystack;
$haystack = Haystack::build()
->addJob(new RecordPodcast)
->addJob(new PublishPodcast)
->addJob(new TweetAboutPodcast)
->dispatch();
Creating Haystacks For Later
Sometimes you may wish to perform other logic or wait before dispatching the Haystack. To accomplish this, use the create
method instead which will create the Haystack model in the database but will not dispatch it. When you are ready to dispatch it, retrieve the model and invoke the start
method.
<?php
use Sammyjo20\LaravelHaystack\Models\Haystack;
$haystack = Haystack::build()
->addJob(new RecordPodcast)
->addJob(new PublishPodcast)
->addJob(new TweetAboutPodcast)
->create();
// Do other things...
$haystack->start(); // Initiate haystack
Cancelling Haystacks
If you need to cancel the Haystack during processing, you can do this by using the cancel
method on the Haystack model. If a job is being processed when you cancel it, it will process the next job and then stop before the job is executed.
use Sammyjo20\LaravelHaystack\Models\Haystack;
$haystack = Haystack::build()
->addJob(new RecordPodcast)
->addJob(new PublishPodcast)
->addJob(new TweetAboutPodcast)
->create();
// Store Haystack
$haystack->start();
// Do other things...
$haystack->cancel();
Last updated