- Make migration job table
php artisan queue:table
- Make migration job batches table
php artisan queue:batches-table
- Migrate table
php artisan migrate
composer require yogameleniawan/realtime-job-batching
- Install Pusher PHP SDK
composer require pusher/pusher-php-server
- Create Channels App Create Channel Pusher
- Setting Up your .env for pusher variable
PUSHER_APP_ID=your_pusher_app_id
PUSHER_APP_KEY=your_pusher_app_key
PUSHER_APP_SECRET=your_pusher_app_secret
PUSHER_HOST=
PUSHER_PORT=443
PUSHER_SCHEME=https
PUSHER_APP_CLUSTER=mt1
- Create repository class on
your_project\app\Repositories
For example:VerificationRepository.php
.
So now you have repository class your_project\app\Repositories\VerificationRepository.php
-
Add
implements RealtimeJobBatchInterface
in your Repository Class -
Don't forget to import interface
use YogaMeleniawan\JobBatchingWithRealtimeProgress\Interfaces\RealtimeJobBatchInterface;
-
The interface has 2 methods. So, you should implement these methods :
public function get_all(): Collection
In this function you can get all data from your database and return it into Collection. Why you should return into Collection? First of all, the data will be looping with foreach method and then add one by one into job and then the process will executed one by one.public function save($data): void
In this function you can make your own business logic to update/delete/something else that you want. So, this function doesn't have any return data that's why this function must be void type. -
This is the example of Repository Class
use YogaMeleniawan\JobBatchingWithRealtimeProgress\RealtimeJobBatch;
use App\Repositories\VerificationRepository;
RealtimeJobBatch::setRepository(new VerificationRepository())
->execute(name: 'User Verification')
VerificationRepository()
is your service repository that you have created before so don't forget to import this class use App\Repositories\VerificationRepository;
- Explanation about RealtimeJobBatch methods :
setRepository(RealtimeJobBatchInterface $repository):object
is method to implement your repository class that you want to use and return to object. So, you can useRealtimeJobBatch
class in another service with different repository.execute($name): object
is method to execute job service with your custom name that you want. This method will return object.
- Add this script to your view (blade). For another view (React/Vue/Etc) you can check out from this link Setup Pusher
- Script Blade :
<script src="https://js.pusher.com/7.2/pusher.min.js"></script>
<script>
var pusher = new Pusher('YOUR_PUSHER_APP_KEY', {
cluster: 'mt1'
});
var channel = pusher.subscribe('channel-job-batching');
channel.bind('broadcast-job-batching', function(data) {
console.log(data)
});
var channel_finish = pusher.subscribe('channel-finished-job');
channel_finish.bind('request-finished-job', function(data) {
if (data.finished == true) {
// reset your progress bar
}
});
</script>
- Response from Pusher :
{
"finished": false,
"progress": 10,
"pending": 90,
"total": 100,
"data": {}
},
Please see CHANGELOG for more information what has changed recently.
The MIT License (MIT). Please see License File for more information.