代码之家  ›  专栏  ›  技术社区  ›  Cowgirl

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

  •  5
  • Cowgirl  · 技术社区  · 7 年前

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

    这些列是

    id     datetime     name
    10011  2018-01-26  something
    

    我要找的是删除这个条目,因为它的日期现在已经过去了。

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

    1 回复  |  直到 7 年前
        1
  •  8
  •   sam    7 年前

    您可以通过两个组件实现这一点:一个 artisan console command task scheduling .

    1. 创建删除旧项目的控制台命令
    2. 安排命令每分钟运行一次

    首先,我们将创建console命令:

    1. 使用构建新控制台命令 php artisan make:command TruncateOldItems
    2. 在新命令中定义 $signature items:truncate 并在 $description
    3. 从内部 handle 方法选择所有符合条件的项目,然后运行 delete() 例如:

      public function handle()
      {
           Item::where('datetime', '<', Carbon::now())->each(function ($item) {
               $item->delete();
           });
       }
      

    然后我们将安排命令:

    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
      

    注意:您需要调出 Item 对于您的模型,并在命令类中包含您的模型和Carbon use App\Item use Carbon\Carbon 位于console命令类的顶部。