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 删除一周前的所有记录的主要内容,如果未能解决你的问题,请参考以下文章