Я работаю над Laravel 5.x. Когда заказ «обработан» и «выполнен», каждый клиент получает автоматическое электронное письмо. Я хочу, чтобы система отправила автоматическое электронное письмо с запросом на проверку примерно через 2 недели с даты выполнения заказа.
$ status означает статус заказа, а «C» означает «выполнено»
Изменено
Не думаю, что это плохая идеяиспользуйте рассылку, когда дело доходит до этой автоматической электронной почты. Я собираюсь использовать cronjob.
app \ Consoles \ Commander \ ReviewEmailRequest.php
public function handle()
{
//
$targetUsers = DB::table('orders')
->whereColumn([
['status',"=",'C'],
['updated_at',"=",'DATE_SUB(CURDATE(), INTERVAL 14 DAY)']
])->get();
Mail::send(['html'=>'emails.reviewRequest'],array('$users' => $targetUsers),function ($message)
{
$message->from('youremail@yourdomain.com', 'My Team');
$message->to('$user')->subject('What do you think of the latest purchase?');
});
var_dump( Mail:: failures());
exit;
}
app \ Console \ Kernel.php
// Kernel.php
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('reviewrequest:email')
->daily();
}
Что вы думаете об этой идее?
Я пробовал этот код раньше. Но не стоит
OrderRepositoy.php
if(getenv('APP_ENV') === 'prod' || getenv('APP_ENV') === 'dev') {
if($status == 'C') {
dispatch(new OrderCompleteEmail($order));
dispatch(new ReviewRequestEmail($order))->delay(now()->addMinutes(5)); // I just add this code
} else if($status == 'R') {
dispatch(new OrderRefundEmail($order));
}
}
Но электронное письмо for ReviewRequestEmail($order)
может быть отправлено, но задержка не влияет на эту работу,Я использовал неправильный способ отложить отправку?
Кроме того, после добавления кода я не смог изменить статус заказа из backoffice. Я предполагаю, что код сломал его.
Спасибо!