"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > How to create a scheduled Task in Laravel ?

How to create a scheduled Task in Laravel ?

Published on 2024-11-03
Browse:662

Hello everyone! Today, I’m going to walk you through the process of creating a scheduled task in Laravel. We’ll take the example of sending a daily marketing email to users.

Step 1: Create the Email Class

First, let’s create a new Mailable class using the following Artisan command:

php artisan make:mail DailyMarketingEmail --view

This command generates a new Mailable class in the App/Mail directory, along with a corresponding view file, daily-marketing-email.blade.php, inside the resources/views/mail/ directory. You can customize the content of the email within this view file.

Step 2: Create an Artisan Command

Next, we’ll create an Artisan command that will handle sending our DailyMarketingEmail. Run the following command:

php artisan make:command SendDailyMarketingEmail

This command will generate a new command class in the app/Console/Commands directory.

Step 3: Understand the Command Structure

After generating your command, you'll see two key properties in the generated class:

protected $signature: This defines the name and signature of your Artisan command.
protected $description: This provides a description of your command.
The handle method in this class is where you’ll define the logic of your command.

After everything is set up, you can list all your Artisan commands by running:

php artisan

You should see your command in the list:

How to create a scheduled Task in Laravel ?

Step 4: Implement the Command Logic

Now, let’s define the logic within the handle method to send the marketing emails:

each(function ($user) {
            Mail::to($user->email)->send(new DailyMarketingEmail);
        });

    }
}

In the handle method, we retrieve all users from the database and send each one the DailyMarketingEmail.

Step 5: Testing the Command

You can manually test your command by running:

php artisan app:send-daily-marketing-emails

Consider using tools like Mailtrap or MailHog to catch and view the sent emails during testing.

Step 6: Schedule the Command

Finally, to automate the sending of this email daily, we need to schedule the command in the schedule method of the Kernel.php file located in the app/Console/ directory:

command('app:send-daily-marketing-emails')->dailyAt('08:30'); 
    }

    /**
     * Register the commands for the application.
     */
    protected function commands(): void
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}

Here, we use the dailyAt('08:30') method to schedule the command to run every day at 08:30 AM. You can adjust the time as needed.

Additional Suggestions:

  1. Queueing Emails: For a large number of users, it's a good practice to queue the emails rather than sending them all at once. This can be done by implementing the ShouldQueue interface in the Mailable class.

  2. Performance Considerations: For large user bases, consider optimizing database queries and the email sending process to ensure efficient performance.

Release Statement This article is reproduced at: https://dev.to/kepsondiaz/how-to-create-a-scheduled-task-in-laravel--54a0?1 If there is any infringement, please contact [email protected] to delete it
Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3