Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Laravel’s command scheduler offers an approach to managing scheduled tasks on your server. The scheduler allows you to fluently and expressively define your command schedule within your Laravel application itself.
We will run the Cron job in our local server and Live Server in this blog, the code and workflow are the same but when we schedule the Cron job in the live server, we make some changes let’s see.
At first, we create a new migration file for test_cron_table.
php artisan make:migration create_testcron_table
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTestcronTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('testcron', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('description');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('testcron');
}
}
After defining columns and his data types For migrating in cmd terminal hit the given below command
php artisan migrate
After making the table, we will make a new model.
php artisan make:model TestCron
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class TestCron extends Model
{
protected $table = 'test_cron';
}
After making the TestCron model, we make a new command DemoCron, where we will perform our task with the help of some logic.
php artisan make:command DemoCron
In the DemoCron.php file, we write our logic and also we define The name and signature of the console command and The console command description.
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\TestCron;
use Carbon\Carbon;
class DemoCron extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'delete:data';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Delete Data Test cron Table 30 days old';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
TestCron::whereDate('created_at', '<', Carbon::now()->subDays(30))
->update([
'deleted_at' => Carbon::now()
]);
$this->info('Demo:Cron Cummand Run successfully!');
}
}
php artisan:list
You can see the DemoCron command with signature and description in Terminal with the help of php artisan:list command.
You may define all of your scheduled tasks in the schedule method of your application’s App\Console\Kernel class. To get started, let’s take a look.
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
Commands\DemoCron::class,
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('delete:data')
->everyMinute();
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}
We register our command in Kernal.php like :
$schedule->command(‘delete:data’)
->everyMinute();
You can use minute, hourly, daily, weekly, monthly, yearly, and more. for Scheduling Job.
<strong>Complete Documentation</strong> : <a href="https://laravel.com/docs/7.x/scheduling" target="_blank" rel="noreferrer noopener">https://laravel.com/docs/7.x/scheduling</a>
Now, we will run our Scheduler in our local server with the help of these given commands, and you can run both commands, Both commands work the same, but the main difference is when you have multiple Cron Jobs you can run php artisan schedule:run
but when we want to run a single Job then we run php artisan delete:data command.
php artisan schedule:run
php artisan delete:data
In DemoCron.php file we wrote a logic in the public function handle, that’s why the older value deleted from the table after the run the Schedule command.
public function handle()
{
TestCron::whereDate('created_at', '<', Carbon::now()->subDays(30))
->update([
'deleted_at' => Carbon::now()
]);
$this->info('Demo:Cron Cummand Run successfully!');
}