首页 > 解决方案 > Laravel 检查某个日期之前的文章

问题描述

在我一直在做的一个项目中,我有一个区域可以上传文章。我使用 Faker 生成了 2,500 篇文章,因为我的目标是测试性能。我得出的结论是,我应该剔除超过 x 天或几个月前的文章。

我所有的文章都有一个已发布状态:“已发布”、“草稿”和“已归档”,这存储在文章数据库表中。

我将构建一个计划任务,该任务将每月运行以检查旧文章,然后将这些文章设置为存档。

在 Laravel 我知道我可以做这样的事情:

$articles = Article::where('created_at', '<=', Carbon::now()->subDays(182));
$articles->published = 'archived';
$articles->save();

但基本上我所追求的是相当于:

UPDATE articles SET published = 'archived' WHERE created_at > <6 months>

这可能真的很简单,也许我只是过于复杂了,但我已经盯着这个看了 90 分钟。

标签: phplaravel

解决方案


您可以where在更新方法中使用子句,如下所示:

Article::where('created_at', '<=', Carbon::now()->subMonths(6))->update(['published' => 'archived']);

这假设您的published属性是可填充的。还值得注意的是,这种方法不会触发任何有说服力的事件。


推荐阅读