【发布时间】:2021-10-22 16:33:51
【问题描述】:
我正在使用 laravel 调度程序,如果满足某个条件,我想将订阅状态设置为过期,并且还需要它在后台每分钟运行一次。图任务调度程序是最好的选择,但不能找出为什么在运行 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();
但是当我只删除表时有效,例如 DB::table('users_subscription')->delete(); 请帮忙?
【问题讨论】:
-
是任务调度器不工作还是闭包(函数)里面的代码?我的意思是,你确定这段代码被执行了吗?
-
一旦我运行 php artisan schedule:work,任务调度程序就会工作,但代码不会被执行,除非我尝试其他方法,例如删除表
-
您正在尝试使用会话信息获取用户 ID,但它不适用于排队或计划的作业,因为该时间不存在会话。因此,您可能在此块“auth()->user()->id”中遇到错误
-
天哪..还有其他选择吗??
-
你说的非常对,当我在其中硬编码一个 id 时它就可以工作,有没有办法解决这个问题?
标签: php laravel laravel-8 query-builder laravel-scheduler