在我正在从事的项目中,我有一个区域可以上传文章。为了测试性能,我使用Faker生成了2500条文章。我得出的结论是,我应该剔除年龄超过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分钟。
答案 0 :(得分:2)
您可以在这样的更新方法中使用where
子句:
Article::where('created_at', '<=', Carbon::now()->subMonths(6))->update(['published' => 'archived']);
这假设您的published
属性是可填写的。还值得注意的是,该方法不会触发任何雄辩的事件。