在数据库中,我有列visit_clear
,我希望一天后它为0,所以我使用了以下代码在kernal.php 中
<?php
namespace AppConsole;
use IlluminateConsoleSchedulingSchedule;
use IlluminateFoundationConsoleKernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
protected $commands = [
];
protected function schedule(Schedule $schedule)
{
$schedule->command('cron:update-user-not-new')->daily();
}
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}
和在命令/UpdateUserNotNew.php 中
<?php
namespace AppConsoleCommands;
use IlluminateConsoleCommand;
use IlluminateSupportFacadesDB;
class UpdateUserNotNew extends Command
{
protected $signature = 'cron:update-user-not-new';
protected $description = 'Command description';
public function __construct()
{
parent::__construct();
}
public function handle()
{
$dayAgo = 1; // Days ago
$dayToCheck = CarbonCarbon::now()->subDays($dayAgo)->format('Y-m-d');
Customer::whereDate('visit_date', '<=', $dayToCheck)
->update([
'visit_clear' => 0
]);
}
}
我是这样解释的,因为你可以看到cron:update-user-not-new
,我应该使用crone:UpdateUserNotNew
吗?
您需要在Kernel.php
中注册您的命令,如下所示:
protected $commands = [
'AppConsoleCommandsUpdateUserNotNew',
];
然后,您应该能够使用php artisan cron:update-user-not-new
手动运行命令
为了使命令的自动运行正常,您需要在系统的任务调度程序中添加一个条目,因为这是Laravel用于按计划运行命令的方法。
假设您使用的是Linux,则需要在crontab中添加一个条目。要执行此操作,请在命令提示符中输入crontab -e
,点击回车键,然后添加以下行:
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
不要忘记将/path-to-your-project
替换为项目的根文件夹编辑完crontab后,保存并关闭编辑器,新条目就应该安装好了,您的命令现在应该按计划运行。
所有这些信息都来自https://laravel.com/docs/7.x/scheduling因此,如果你需要更多信息,请查看