laravel 订单十分钟后自动取消

要在 Laravel 中实现订单未支付情况下自动关闭订单的功能,你可以使用 Laravel 的任务调度器(Task Scheduler)结合队列(Queue)来实现。下面是一个简单的实现示例:
  1. 创建一个关闭订单的任务类。在命令行中使用以下命令生成任务类:
php artisan make:job CloseOrder
  1. 打开生成的 APP\JOBS\CloseOrder 类文件,将 handle() 方法中的逻辑改为关闭订单的操作。你可以在此方法中实现关闭订单的具体逻辑,例如将订单状态设置为关闭、发送通知等。
use App\Models\Orders;
...
public function handle()
    {
        //
        $orders = Orders::where('p_statu', 0)
            ->where('created_at', '<=', now()->subMinutes(10))
            ->get();
    
        foreach ($orders as $order) {
            // 关闭订单的逻辑,例如将订单状态设置为已超时(4)
            $order->p_statu = 4;
            $order->save();
            // 其他关闭订单的操作,例如发送通知等
        }
    }
  1. 在 App\Console\Kernel 类的 schedule() 方法中定义任务调度。打开 Kernel 类文件,将以下代码添加到 schedule() 方法中:
protected function schedule(Schedule $schedule)
{
    $schedule->job(new CloseOrder)->everyMinute();
}
  1. 上述代码中,我们使用 job() 方法来调度 CloseOrder 任务类,使用 everyMinute() 方法表示每分钟运行一次任务。withoutOverlapping() 方法用于确保任务不会重叠运行。when() 方法用于添加自定义的条件判断,例如订单未支付且创建时间超过十分钟的订单,你需要根据你的具体业务逻辑进行相应的判断。

  2. 开启定时

* * * * * cd /path-to-your-laravel-project && php artisan schedule:run >> /dev/null 2>&1

// * * * * * 表示每分钟都运行该命令。
//  /path-to-your-laravel-project  laravel 路径

或者可以使用宝塔的定时任务


image.png
  1. 完成
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容