Laravel 删除一周前的所有记录

Posted

技术标签:

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

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

我已经注册了命令:

Artisan::add(new removeWeek);

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于Laravel 删除一周前的所有记录的主要内容,如果未能解决你的问题,请参考以下文章

PHP MySQL:获取一周前的所有MySQL行

MySQL:获取所有一周前的MySQL行

Laravel删除不起作用

在 SQL Server 中检索一周前的死锁

“gcloud app logs tail”显示一周前的数据

软删除laravel 5中表中的所有记录