要在 Laravel 中實現(xiàn)訂單未支付情況下自動關(guān)閉訂單的功能,你可以使用 Laravel 的任務(wù)調(diào)度器(Task Scheduler)結(jié)合隊列(Queue)來實現(xiàn)匕累。下面是一個簡單的實現(xiàn)示例:
- 創(chuàng)建一個關(guān)閉訂單的任務(wù)類谴仙。在命令行中使用以下命令生成任務(wù)類:
php artisan make:job CloseOrder
- 打開生成的 APP\JOBS\CloseOrder 類文件迂求,將 handle() 方法中的邏輯改為關(guān)閉訂單的操作。你可以在此方法中實現(xiàn)關(guān)閉訂單的具體邏輯晃跺,例如將訂單狀態(tài)設(shè)置為關(guān)閉揩局、發(fā)送通知等。
use App\Models\Orders;
...
public function handle()
{
//
$orders = Orders::where('p_statu', 0)
->where('created_at', '<=', now()->subMinutes(10))
->get();
foreach ($orders as $order) {
// 關(guān)閉訂單的邏輯掀虎,例如將訂單狀態(tài)設(shè)置為已超時(4)
$order->p_statu = 4;
$order->save();
// 其他關(guān)閉訂單的操作凌盯,例如發(fā)送通知等
}
}
- 在 App\Console\Kernel 類的 schedule() 方法中定義任務(wù)調(diào)度。打開 Kernel 類文件涩盾,將以下代碼添加到 schedule() 方法中:
protected function schedule(Schedule $schedule)
{
$schedule->job(new CloseOrder)->everyMinute();
}
上述代碼中十气,我們使用 job() 方法來調(diào)度 CloseOrder 任務(wù)類,使用 everyMinute() 方法表示每分鐘運行一次任務(wù)春霍。withoutOverlapping() 方法用于確保任務(wù)不會重疊運行砸西。when() 方法用于添加自定義的條件判斷,例如訂單未支付且創(chuàng)建時間超過十分鐘的訂單,你需要根據(jù)你的具體業(yè)務(wù)邏輯進行相應(yīng)的判斷芹枷。
開啟定時
* * * * * cd /path-to-your-laravel-project && php artisan schedule:run >> /dev/null 2>&1
// * * * * * 表示每分鐘都運行該命令衅疙。
// /path-to-your-laravel-project laravel 路徑
或者可以使用寶塔的定時任務(wù)
image.png
- 完成