我剛剛為我當前正在處理的 Laravel 項目設置了一個 cron 作業(yè)。這是我命令中的句柄函數。public function handle() { Log::info("PayoutList Cron started!"); $tradersToPay = Investments::select('id', 'monthly_roi') ->where(DB::raw('CURDATE()'), '<=', 'end_date') ->where(DB::raw('DAY(CURDATE())'), '=', DB::raw('DAY(start_date)')) ->where('status', '=', 2) ->get(); foreach ($tradersToPay as $payout){ $row = [ 'investment_id' => $payout->id, 'roi' => $payout->monthly_roi, #'created_at' => date('Y-m-d H:i:s') ]; Payouts::create($row); } #$this->info('PayoutList Cron command executed successfully'); Log::info("PayoutList Cron command executed successfully"); }我已安排此命令在每天午夜運行,它僅在日志文件中顯示日志消息,這意味著命令已執(zhí)行,但其間的查詢不在我的 cpanel 上運行,而是在我的 Windows 本地服務器上運行。我需要這方面的幫助。$schedule->command('payoutlist:cron') ->dailyAt('02:30') ->timezone('Africa/Lagos');我的主機只允許在 cron 作業(yè)上設置它,但它仍然工作正常*/5 * * * * /usr/local/bin/php /directorty/artisan schedule:run >> /dev/null 2>&1我正在使用 Laravel 5.8
2 回答

慕容3067478
TA貢獻1773條經驗 獲得超3個贊
問題源于這一行:
->where(DB::raw('CURDATE()'), '<=', 'end_date')
Laravel 期望第三個參數是一個值,因此它end_date
作為字符串而不是列名傳遞。由于您沒有傳遞任何實際值,因此將原始查詢中的整個位置轉換為:
->whereRaw('CURDATE() <= end_date')

Helenr
TA貢獻1780條經驗 獲得超4個贊
您正在使用原始查詢嘗試使用 eloquent 來確保工作正常,或者比較本地和在線服務器之間的數據庫版本
而不是 DB::raw 使用這樣的東西: where('end_date', '>=', date('Ymd').' 00:00:00'));
- 2 回答
- 0 關注
- 206 瀏覽
添加回答
舉報
0/150
提交
取消