为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel Cron Job 不执行 Eloquent 查询

Laravel Cron Job 不执行 Eloquent 查询

PHP
有只小跳蛙 2023-11-03 20:13:24
我刚刚为我当前正在处理的 Laravel 项目设置了一个 cron 作业。这是我命令中的句柄函数。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");    }我已安排此命令在每天午夜运行,它仅在日志文件中显示日志消息,这意味着命令已执行,但其间的查询不在我的 cpanel 上运行,而是在我的 Windows 本地服务器上运行。我需要这方面的帮助。$schedule->command('payoutlist:cron')                    ->dailyAt('02:30')                    ->timezone('Africa/Lagos');我的主机只允许在 cron 作业上设置它,但它仍然工作正常*/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')


查看完整回答
反对 回复 2023-11-03
?
Helenr

TA贡献1780条经验 获得超4个赞

您正在使用原始查询尝试使用 eloquent 来确保工作正常,或者比较本地和在线服务器之间的数据库版本

而不是 DB::raw 使用这样的东西: where('end_date', '>=', date('Ymd').' 00:00:00'));


查看完整回答
反对 回复 2023-11-03
  • 2 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信