X时间后如何删除某些记录或文件-Laravel 5

时间:2019-01-16 21:02:18

标签: sql laravel laravel-5

我想创建一个脚本,在X次之后删除一些记录,我会选择它,但是我不知道,我该怎么做? 与我的文件相同,例如,我想在X时间后从上传中删除一些文件,并且要这样做,我将从存储中删除文件,并从数据库中删除文件记录,让我的网站变慢,任何做到这一点的问题

以这个为例?

Soft DeletingTask Scheduling

我的桌子是: My Table Image 所以我想例如在创建后2个小时后删除此记录?但是我有很多记录吗?该怎么做?

文件表: Files Table Part 1 Files Table Part 2 这些是我的记录,它们包含我的文件的路径,但是例如,每个文件在创建后的5天后就会过期,因此,我将从路径中将其删除,然后从数据库中删除该记录。但这会使网站变得非常慢吗?有什么办法吗?

谢谢:)

2 个答案:

答案 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');

有很多方法可以做到这一点。但是,您需要了解调度程序的工作原理(简单),然后才能在此处采用可能的解决方案。