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:
Step 4: Implement the Command Logic
Now, let’s define the logic within the handle method to send the marketing emails:
<?php namespace App\Console\Commands; use App\Models\User; use Illuminate\Console\Command; use App\Mail\DailyMarketingMail; use Illuminate\Support\Facades\Mail; class SendDailyMarketingEmails extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'app:send-daily-marketing-emails'; /** * The console command description. * * @var string */ protected $description = 'Send a marketing email to all users'; /** * Execute the console command. */ public function handle() { $users = User::get(); $users->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:
<?php namespace App\Console; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; class Kernel extends ConsoleKernel { /** * Define the application's command schedule. */ protected function schedule(Schedule $schedule): void { $schedule->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:
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.
Performance Considerations: For large user bases, consider optimizing database queries and the email sending process to ensure efficient performance.
The above is the detailed content of How to create a scheduled Task in Laravel ?. For more information, please follow other related articles on the PHP Chinese website!

APHPDependencyInjectionContainerisatoolthatmanagesclassdependencies,enhancingcodemodularity,testability,andmaintainability.Itactsasacentralhubforcreatingandinjectingdependencies,thusreducingtightcouplingandeasingunittesting.

Select DependencyInjection (DI) for large applications, ServiceLocator is suitable for small projects or prototypes. 1) DI improves the testability and modularity of the code through constructor injection. 2) ServiceLocator obtains services through center registration, which is convenient but may lead to an increase in code coupling.

PHPapplicationscanbeoptimizedforspeedandefficiencyby:1)enablingopcacheinphp.ini,2)usingpreparedstatementswithPDOfordatabasequeries,3)replacingloopswitharray_filterandarray_mapfordataprocessing,4)configuringNginxasareverseproxy,5)implementingcachingwi

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

TomakePHPapplicationsfaster,followthesesteps:1)UseOpcodeCachinglikeOPcachetostoreprecompiledscriptbytecode.2)MinimizeDatabaseQueriesbyusingquerycachingandefficientindexing.3)LeveragePHP7 Featuresforbettercodeefficiency.4)ImplementCachingStrategiessuc

ToimprovePHPapplicationspeed,followthesesteps:1)EnableopcodecachingwithAPCutoreducescriptexecutiontime.2)ImplementdatabasequerycachingusingPDOtominimizedatabasehits.3)UseHTTP/2tomultiplexrequestsandreduceconnectionoverhead.4)Limitsessionusagebyclosin

Dependency injection (DI) significantly improves the testability of PHP code by explicitly transitive dependencies. 1) DI decoupling classes and specific implementations make testing and maintenance more flexible. 2) Among the three types, the constructor injects explicit expression dependencies to keep the state consistent. 3) Use DI containers to manage complex dependencies to improve code quality and development efficiency.

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

Dreamweaver Mac version
Visual web development tools

Dreamweaver CS6
Visual web development tools

SublimeText3 Chinese version
Chinese version, very easy to use
