如果项目(多个项目)将在几天后过期,如何通知管理员 - 拉拉维尔


">

项目"表中有许多项目,并且项目表中有一个过期日期列。我只想在每个项目提前一个日期之前每天收到推送通知(到期日期彼此不同,可以有一个到期日期来多个项目(。我是拉拉维尔的新手。请帮助我。

这可以通过Laravel任务调度简单地完成

  1. 您需要创建一个自定义工匠命令,例如

    php artisan make:command SendItemExpiryEmailsToAdmin
    

  1. 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
    }
    

  1. 可邮寄以发送邮件。

    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
    }
    }
    

  1. 此命令需要每天使用 Cornjob 执行。

试试这个,我相信这会有所帮助。如果您有任何问题,请告诉我。

您可以在 Laravel 中创建任务计划程序。 您可以从此处的文档获取更多信息:https://laravel.com/docs/5.8/scheduling

1(您可以在调度代码中获得创建登录名。获取明天即将到期的所有项目,并将项目的详细信息发送到管理员电子邮件。

如果您在用户定义工匠命令方面有一些知识,您还可以实现调度工匠命令 https://laravel.com/docs/5.8/scheduling#scheduling-artisan-commands。

最新更新