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

How to notify the admin if the items(Multiple items) are going to expire in days later-Laravel

项目table中有很多项目,项目table中有一个过期日期列。我只想在每个项目提前一个日期过期之前每天收到推送通知(过期日期彼此不同,可以有一个过期日期到多个项目)。我是 laravel 的新手。请帮助我。

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

1) 您可以在调度代码中创建登录名。获取明天到期的所有物品,并将物品的详细信息发送到管理员邮箱。

如果您对用户定义的 artisan 命令有一些了解,您还可以实现 scheduling-artisan-commands https://laravel.com/docs/5.8/scheduling#scheduling-artisan-commands

这可以通过 Laravel task scheduling

简单地完成
  1. 你需要创建一个custom artisan command喜欢

    php artisan make:command SendItemExpiryEmailsToAdmin
    

  1. App\Console\Commands下你会发现应该创建一个classSendItemExpiryEmailsToAdmin

    i) 首先您需要定义用于从命令行调用的命令的签名。

    protected $signature = 'email:send-item-expiry-email-to-admin';
    

    ii) 在同一个 class 的 handle() 中,写下你的逻辑。下面给出了一个示例逻辑。您将需要创建一个 Mailable class 来发送邮件。

    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. Mailable 发送邮件。

    i) 运行下面的命令创建一个mailable

    php artisan make:mail ItemsExpiryEmail
    

    ii) 在 mailable 中,编写您的代码。下面给出了示例代码,您可以在邮件视图中使用 $this->itemIds,因为它是一个 public 变量。

    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执行。

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