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 发现错误。
我正在使用 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 发现错误。