项目"表中有许多项目,并且项目表中有一个过期日期列。我只想在每个项目提前一个日期之前每天收到推送通知(到期日期彼此不同,可以有一个到期日期来多个项目(。我是拉拉维尔的新手。请帮助我。
这可以通过Laravel任务调度简单地完成
-
您需要创建一个自定义工匠命令,例如
php artisan make:command SendItemExpiryEmailsToAdmin
-
在
AppConsoleCommands
下,你会发现一个应该创建的类SendItemExpiryEmailsToAdmin
。i( 首先,您需要定义将用于从命令行调用的命令的签名。
protected $signature = 'email:send-item-expiry-email-to-admin';
ii( 在同一类的
handle()
内,编写你的逻辑。下面给出了一个示例逻辑。您需要创建一个可邮寄类来发送邮件。public function handle() { // To fetch all the items ids which are going to expired today. $itemsIds = Items::whereBetween('expired', [Carbon::now()->setTime(0,0)->format('Y-m-d H:i:s'), Carbon::now()->setTime(23,59,59)->format('Y-m-d H:i:s')]) ->pluck('id') ->toArray(); $itemsIds = implode(" ", $itemsIds); Mail::queue(new ItemsExpiryEmail($itemsIds)); // If you are not using queue, just replace `queue` with `send` in above line }
-
可邮寄以发送邮件。
i( 运行以下命令以创建可邮寄对象
php artisan make:mail ItemsExpiryEmail
ii( 在可邮寄邮件中,编写您的代码。下面给出了一个示例代码,您可以在邮件视图中使用
$this->itemIds
,因为它是一个公共变量。class ItemsExpiryEmail extends Mailable { use Queueable, SerializesModels; // don't forget to import these. public $itemIds; public function __construct($itemIds) { $this->itemIds = $itemIds; } public function build() { return $this->view('emails.orders.shipped'); return $this->to('test@example.com', 'Admin') ->subject('Subject of the mail') ->view('emails.adminNotification'); // adminNotification will be the view to be sent out as email body } }
- 此命令需要每天使用 Cornjob 执行。
试试这个,我相信这会有所帮助。如果您有任何问题,请告诉我。
您可以在 Laravel 中创建任务计划程序。 您可以从此处的文档获取更多信息:https://laravel.com/docs/5.8/scheduling
1(您可以在调度代码中获得创建登录名。获取明天即将到期的所有项目,并将项目的详细信息发送到管理员电子邮件。
如果您在用户定义工匠命令方面有一些知识,您还可以实现调度工匠命令 https://laravel.com/docs/5.8/scheduling#scheduling-artisan-commands。