Php 如何在一个月到期后将列值设置为零

Php 如何在一个月到期后将列值设置为零,php,mysql,laravel,Php,Mysql,Laravel,我有一个用户可以下载一些内容的页面。有两种类型的用户-基本用户和高级用户。 基本用户每月只能下载100个内容。在DB中,我有一个用户表,其中包含downloadCounter列,每次用户下载某个内容时,该列的值都会增加1。 但是,如何在每个月将该值重置为0?这可以直接在MySQL中完成,还是可以通过Laravel和Carbon实现?首先创建这样的命令 php artisan make:command testcommand 现在,testcommand.php是在app\Console\Com

我有一个用户可以下载一些内容的页面。有两种类型的用户-基本用户和高级用户。 基本用户每月只能下载100个内容。在DB中,我有一个用户表,其中包含
downloadCounter
列,每次用户下载某个内容时,该列的值都会增加1。
但是,如何在每个月将该值重置为0?这可以直接在MySQL中完成,还是可以通过Laravel和Carbon实现?

首先创建这样的命令

php artisan make:command testcommand
现在,testcommand.php是在app\Console\Commands目录下创建的

打开该文件,然后添加$signature,如下所示:

protected $signature = 'test_command';
protected function schedule(Schedule $schedule)
    {
         $schedule->command('test_command')->monthlyOn(1, '00:00')->timezone('Asia/Kathmandu');
    }
您可以在下面的文件中添加一些命令说明。 然后可以在文件的按钮处找到名为handle()的函数。你应该写所有的代码来重置你的计数

public function handle()
    {
     // write code here to reset downloadCounter
    }
现在打开app\Console\directory中的Kernal.php文件,然后添加以下内容

protected $commands = [
    //
    Commands\testcommand::class,
];
在此之后,向调度函数添加以下内容,如下所示:

protected $signature = 'test_command';
protected function schedule(Schedule $schedule)
    {
         $schedule->command('test_command')->monthlyOn(1, '00:00')->timezone('Asia/Kathmandu');
    }
只需在本地环境中输入command
php artisan test_command
即可检查作业是否正常工作。对于live case,您可以安排everyMinute()来检查它的功能


希望您能理解。

使用cron job重置计数器,并在第1天的文档中每月在Hered上执行此命令。您有在Amazon实例(CentOS)上设置cron job的参考/教程吗。。。我对cron完全是一个初学者。好吧,那么我将在回答中添加示例案例。在我尝试这个示例之前,我想问你——这是否只适用于我当地的环境?我的服务器呢?如上所述,我正在使用AmazonLinux实例。我应该在那里添加一些东西来启动调度程序吗?我对Amazon server不太熟悉。但是,一般来说,它是由服务器执行的,不应该添加任何配置。如果您所做的只是运行一个更新查询,那么跳过命令创建部分,并使用闭包直接调度代码。请参见这里的第一个示例