我想创建一个脚本,在X次之后删除一些记录,我会选择它,但是我不知道,我该怎么做? 与我的文件相同,例如,我想在X时间后从上传中删除一些文件,并且要这样做,我将从存储中删除文件,并从数据库中删除文件记录,让我的网站变慢,任何做到这一点的问题
以这个为例?
我的桌子是: 所以我想例如在创建后2个小时后删除此记录?但是我有很多记录吗?该怎么做?
文件表: 这些是我的记录,它们包含我的文件的路径,但是例如,每个文件在创建后的5天后就会过期,因此,我将从路径中将其删除,然后从数据库中删除该记录。但这会使网站变得非常慢吗?有什么办法吗?
谢谢:)
答案 0 :(得分:1)
Files::where('created_at', '<', Carbon::now()->subHours(2))->delete();
确保已安装Carbon包
答案 1 :(得分:1)
Laravel处理得很好。您是正确的,请使用Task Scheduler
我建议您设置两个不同的作业,因为对于两个任务之间的时间,您有两个不同的标准(2小时5天)。
对于记录,您可以在作业中设置检查以查看记录的创建时间,并删除超过2小时的记录。像这样:
$schedule->call(function () {
DB::table('your_table')->whereRaw('created_at >= now() - interval 2 hour')
})->daily();
如果使用Carbon,则可以使用以下方式更改查询:
->where('created_at', '>=', Carbon::now()->subMinutes(120)->toDateTimeString());
与文件删除相同-做一项删除超过5天的文件的工作。如果您将工作设置为在最不受欢迎的时间每天进行一次,则不会降低系统的速度。因此,在做工作时:
$schedule->job(new YourJob)->dailyAt('3:00');
有很多方法可以做到这一点。但是,您需要了解调度程序的工作原理(简单),然后才能在此处采用可能的解决方案。