laravel用队列定时取消订单

1.修改队列默认引擎 .env

QUEUE_CONNECTION=redis

2.新建订单取消任务类



namespace App\Jobs;

use App\Models\Order;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class CancelOrder implements ShouldQueue
{
     
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $order;

    public $deleteWhenMissingModels = true;

    /**
     * CancelOrder constructor.
     * @param $id
     */
    public function __construct($id)
    {
     
        //
        $this->order = Order::query()->find($id);
        // 设置延迟的时间,delay() 方法的参数代表多少秒之后执行
        $this->delay(30);
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
     
        //
        if ($this->order->pay_status == 0) {
     //未付款
            //订单状态修改为取消状态
            $this->order->update(['order_status' => 2]);
        }
    }
}

3.在创建订单成功后,将订单ID放入队列

CancelOrder::dispatch($resultOrder->id);

4.登录服务器,到网站根目录

php -u www artisan queue:work

你可能感兴趣的:(laravel,php)