實現待付款訂單超過48小時自動關閉的功能,需要在系統中新增一個定時任務,週期性地檢查待付款訂單的建立時間,如果訂單的建立時間超過了48小時並且訂單狀態為待付款,則將訂單狀態更新為已關閉。
以下是一個簡單的示例,展示如何使用 Laravel 的任務排程器來實現這個功能:
1 建立一個新的任務:
php artisan make:task ClosePendingOrders
2 開啟生成的 ClosePendingOrders
任務檔案,例如 app/Tasks/ClosePendingOrders.php
,並在 handle
方法中編寫任務邏輯:
48小時:Carbon::now()->subHours(48)
namespace App\Tasks;
use Carbon\Carbon;
use App\Models\Order;
use Illuminate\Support\Facades\Log;
class ClosePendingOrders
{
public function handle()
{
$pendingOrders = Order::where('status', 'pending') // 待付款狀態
->where('created_at', '<=', Carbon::now()->subHours(48)) // 超過48小時
->get();
foreach ($pendingOrders as $order) {
$order->update(['status' => 'closed']); // 更新訂單狀態為已關閉
Log::info('Closed pending order: '.$order->id);
}
}
}
3 在 app/Console/Kernel.php
檔案中的 schedule
方法中,新增任務排程器的排程規則:
protected function schedule(Schedule $schedule)
{
$schedule->job(new ClosePendingOrders)->hourly(); // 將任務設定為每小時執行一次
}
4 執行任務排程器(Cron Job):
php artisan schedule:run
這將會在每個小時的整點時檢查待付款訂單,如果訂單超過48小時,則會將其狀態更新為已關閉。請根據你的需求和專案實際情況進行調整。同時,確保你已經正確配置了 Laravel 的任務排程器和日誌功能。
本作品採用《CC 協議》,轉載必須註明作者和本文連結
溫馨提示:如果你需要 開通 JetBrains 全家桶賬號&& 正式版啟用碼
推薦:
點選這裡免費獲取