【问题标题】:Laravel Remove All Records One Week OldLaravel 删除一周前的所有记录
【发布时间】:2014-02-16 12:21:19
【问题描述】:

我想创建一个 cron 作业,它在 Laravel 中触发一个任务/命令,以删除所有 1 周前的记录。我正在尝试使用 ExpressiveDate 来帮助我评估时间。 Laravel 中最好的方法是什么?

我已经注册了命令:

Artisan::add(new removeWeek);

并在 /apps/command 下创建了一个 removeWeek.php 命令,效果很好。我正在寻找最好的语法——一种雄辩的方式——来遍历我的记录,并且只删除从当天开始一周前的记录。 cron 作业每天运行一次。

【问题讨论】:

    标签: laravel laravel-4 delete-row


    【解决方案1】:

    看起来你已经准备好了,所以现在你只需要

    Calendar::where('created_at', '<', \Carbon\Carbon::now()->subWeek())->delete();
    

    最后一件事:类名通常大写:

    class RemoveWeek() {
    
    }
    

    【讨论】:

      【解决方案2】:

      定期删除记录的 laravel 方法是使用 trait Illuminate\Database\Eloquent\Prunable

      这将帮助您通过实现 prunable 方法来删​​除不再需要的模型,该方法返回一个解析要删除的模型的 Eloquent 查询构建器。

      namespace App\Models;
      
      use Illuminate\Database\Eloquent\Model;
      use Illuminate\Database\Eloquent\Prunable;
      
      class Post extends Model
      {
          use Prunable;
      
          /**
           * Get the prunable model query.
           *
           * @return \Illuminate\Database\Eloquent\Builder
           */
          public function prunable()
          {
              return static::where('created_at', '<=', now()-> subWeek());
          }
      }
      

      然后运行命令:

      php artisan model:prune
      

      当然您可以安排model:prune artisan 命令定期运行

      这是文档的链接: https://laravel.com/docs/8.x/eloquent#pruning-models

      【讨论】:

        猜你喜欢
        • 2011-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-13
        • 1970-01-01
        • 2012-10-01
        • 2011-11-06
        • 1970-01-01
        相关资源
        最近更新 更多