DEV Community

Cover image for Create Custom Artisan Command in Laravel
Chandresh Singh
Chandresh Singh

Posted on

3 3

Create Custom Artisan Command in Laravel

Artisan is a frequently used command-line interface that comes with Laravel which provides a set of commands that are helpful while building your application.

Let’s say you want a command to automatically email getting started guide link to users 1 day after registration.

If you would like to watch me doing this then here is the tutorial.

Let's Start!

Create a new command using command:

php artisan make:command SendDocLinkToUsers

Open app/Console/Commands/SendDocLinkToUsers.

Set name and signature of your command and write a small description about your command.

Inside handle function you can write your logic. It should look something like this:

<?php

namespace App\Console\Commands;

use App\Notifications\SendDocLinkNotification;
use App\User;
use Illuminate\Console\Command;

class SendDocLinkToUsers extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'users:send_doc_link';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Send doc link to users 1 day after registration.';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        User::whereNotNull('email_verified_at')
            ->whereDate('created_at', now()->subDays(1))
            ->get()->each(function ($user) {
                $user->notify(new SendDocLinkNotification());
            });
    }
}

Create Email Notification that we want to send to users.

php artisan make:notification SendDocLinkNotification

Make changes in app/Notifications/SendDocLinkNotification file as per your liking.

    public function toMail($notifiable)
    {
        return (new MailMessage)
                    ->line('Thanks for registering. Below is the link to our get started guide.')
                    ->action('View Get Started Guide', url('/getting_started_guide_url'))
                    ->line('Feel free to reply to this email if you need any help in getting started.');
    }

Try running the command

php artisan users:send_doc_link

Now to run it auto automatically everyday, all you need to do is set the command in Laravel scheduler. You can do this in app/Console/Kernel.php

    protected function schedule(Schedule $schedule)
    {
        $schedule->command('users:send_doc_link')->daily()->at('08:00');
    }

Or You can even use crontab to run the command everyday.
Running command using crontab

*Note: For running Laravel scheduler you will have to set the command in either crontab or supervisor to run every minute.

Crontab entry for running Laravel Scheduler

You can learn more about Laravel scheduler here: https://laravel.com/docs/7.x/scheduling#introduction

You can find the entire code here

That's it!

Hope you find it useful.

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more