Laravel 8 任务调度程序

Laravel 8 Task scheduler

我正在使用 laravel 调度程序,如果满足特定条件,我想将订阅状态设置为过期,并且还需要在后台每分钟 运行 设置一次订阅状态..图任务调度程序是最好的选择,但无法弄清楚为什么代码在 运行ning php artisan schedule:work 之后没有执行......下面是我的代码 位于App/Console/Kernel.php(调度函数)

  $schedule->call(function () {
        $checkSubStatus = UserSubscription::where('status', 'approved')->where('users_id', auth()->user()->id)->first();
        $currentTime = Carbon::now();
        if($currentTime > $checkSubStatus->expiry_date) {
            $checkSubStatus->update([
                'status' => 'expired'
            ]);
        }
    })->everyMinute();

但是当我只删除 table 时有效,就像这样 DB::table('users_subscription')->delete(); 请帮忙?

您有一个由 auth()->user()->id 引起的异常,因为在执行您的关闭时没有记录任何用户。

您可以查看storage/logs/laravel.log中的日志,如果是这样,解决方案只是避免在调度程序中使用任何身份验证机制。

作为替代方案,您必须重新考虑什么 UserSubscription 应该过期:

UserSubscription::where('status', 'approved')
->where('expiry_date', '<', now())
->update(['status' => 'updated');

没有用户了,您只是让日期早于现在的所有订阅都过期。

感谢 Emre Kaya 发现错误。