php - 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 分钟。
解决方案
您可以where
在更新方法中使用子句,如下所示:
Article::where('created_at', '<=', Carbon::now()->subMonths(6))->update(['published' => 'archived']);
这假设您的published
属性是可填充的。还值得注意的是,这种方法不会触发任何有说服力的事件。
推荐阅读
- redux - 使用 Redux-Thunk 与普通异步代码有什么意义?[包括示例]
- django - Django 创建临时文件以供下载
- ios - Mapbox iOS 避开高速公路/高速公路
- typescript - 打字稿泛型参数断言
- paypal - PayPal Express Checkout 集成未完全完成交易
- timer - SwiftUI:如何构建可自定义的计时器倒计时及其单独的视图
- c++ - 如何使用 Vulkan 编译 HLSL 着色器?
- php - Web 服务器应如何响应 RFC 8058 List-Unsubscribe 或 List-Unsubscribe-Post?
- javascript - 在刷新之前限制按钮使用一次?
- database - 如何解决 OpenShift 集群中多个 pod 中的 liquibase 等待更改日志锁定问题?