For implementation check in : Github Repository
Introduction
I have faced a problem selecting a seat in a hall where the seat reserve timeout is supposed to be five minutes. Basically, any visitor can reserve his/her seat for at least five minutes. After that the seat will be available for all.
Problem
I have stored the selected seat on a reserve_seats
table. Where I store all of the visitors' selected seats by their user_id
. The main concern is it is needed to auto delete the seat when the five minutes will be passed.
Solution
Laravel has come up with a great solution of deleting the old data by managing schedule work.
1. Create a Laravel Artisan Command:
php artisan make:command ClearOldData
This will create a new command file in the app/Console/Commands
directory.
2. Define the Command Logic:
Open the ClearOldData.php
file in the app/Console/Commands
directory and define the logic for deleting old data. In this case, we'll assume you have a table named your_table_name
and you want to delete records older than 5 minutes.
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Carbon\Carbon; class ClearOldData extends Command { protected $signature = 'clear:old-data'; protected $description = 'Delete old data from the table.'; public function __construct() { parent::__construct(); } public function handle() { // Calculate the date and time 5 minutes ago $fiveMinutesAgo = Carbon::now()->subMinutes(5); // Replace 'your_table_name' with the name of your table \DB::table('your_table_name')->where('created_at', '<', $fiveMinutesAgo)->delete(); $this->info('Old data has been deleted.'); } }
3. Define the Task Scheduling:
Open the app/Console/Kernel.php
file and define the scheduling logic. Add the following code to the schedule method in the Kernel class:
protected function schedule(Schedule $schedule) { $schedule->command('clear:old-data')->everyMinute(); }
4. Run the Scheduler:
To activate the task scheduler, you'll need to add a cron
job that runs Laravel's scheduler every minute. In your server's cron
file, add the following line:
* * * * * cd /path-to-your-laravel-project && php artisan schedule:run >> /dev/null 2>&1
5. Run the Scheduler:
To manually run the scheduler, you can execute the following command:
php artisan schedule:run
Now, the clear:old-data
command will run every minute and delete records older than 5 minutes from your specified table. Adjust the table name and timing as needed for your specific use case.
Top comments (0)