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

Cow*_*irl 4 php mysql cron laravel laravel-5

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

列是

id     datetime     name
10011  2018-01-26  something
Run Code Online (Sandbox Code Playgroud)

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

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

sam*_*sam 8

您可以使用2个组件实现此目的:工匠控制台命令任务调度.

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

首先,我们将创建控制台命令:

  1. 使用支持新的控制台命令 php artisan make:command TruncateOldItems
  2. 在您的新命令定义$signatureitems:truncate和包括在描述$description
  3. handle方法中选择符合条件的所有项目,然后delete()在它们上运行,例如:

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

然后我们将安排命令:

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

    $schedule->command('items:truncate')->everyMinute();
    
    Run Code Online (Sandbox Code Playgroud)
  3. 通过添加cron条目来启动调度程序:

    * * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
    
    Run Code Online (Sandbox Code Playgroud)

注意:您需要换出Item模型,并在命令类中包含模型和Carbon,use App\Itemuse Carbon\Carbon在控制台命令类的顶部.