Laravel会自动删除过去日期的表记录

时间:2018-01-27 23:44:47

标签: php mysql laravel laravel-5 cron

我有一个数据库表,可以从API中获取一些信息。

列是

id     datetime     name
10011  2018-01-26  something

我正在寻找的是删除此条目,因为它现在的日期已经过去了。

有没有办法在Laravel中指定一个cron作业,它会自动删除该列 - 该列的条目为datetime并且过去了?

1 个答案:

答案 0 :(得分:5)

您可以使用2个组件实现此目标:artisan console commandtask scheduling

  1. 创建删除旧项目的控制台命令
  2. 安排命令每分钟运行
  3. 首先,我们将创建控制台命令:

    1. 使用php artisan make:command TruncateOldItems
    2. 支持新的控制台命令
    3. 在新命令中将$signature定义为items:truncate,并在$description
    4. 中包含说明
    5. handle方法中,选择符合条件的所有项目,然后对其运行delete(),例如:

      public function handle()
      {
           Item::where('datetime', '<', Carbon::now())->each(function ($item) {
               $item->delete();
           });
       }
      
    6. 然后我们安排命令:

      1. 打开App\Console\Kernel.php
      2. schedule方法中,安排命令:

        $schedule->command('items:truncate')->everyMinute();
        
      3. Start the scheduler添加一个cron条目:

        * * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
        
      4. 注意:您需要为模型更换Item,并在命令类中包含模型和Carbon,其中use App\Itemuse Carbon\Carbon位于顶部控制台命令类。