Laravel创建7天后如何删除数据库记录

时间:2018-07-30 02:55:34

标签: php mysql sql laravel eloquent

如何自动删除7天后创建的数据库记录?而且我必须放置在index.blade.php或其他内容中吗?也许有一些调度程序?

public function index()
{
    $results = Test::orderBy('created_at', 'desc')->take(5)->get();
    if (!Auth::user()->isAdmin()) {
        $results = $results->where('user_id', '=', Auth::id());
    }
    return view('results.index', compact('results'));
}

3 个答案:

答案 0 :(得分:1)

$stale_posts = Test::where('updated_at', '<', Carbon::now()->subDays(7))->get();
foreach ($stale_posts as $post) {
   $post->delete();
}

答案 1 :(得分:1)

您可以使用Laravel任务调度来做到这一点。

https://laravel.com/docs/5.6/scheduling

安排每周运行的任务,以删除帖子。

任务是在schedule类的App\Console\Kernel方法内部定义的。

您可以在其中定义一个闭包:

protected function schedule(Schedule $schedule)
    {
        $schedule->call(function () {
            Test::where('updated_at', '<', Carbon::now()->subDays(7))->delete();
        })->weekly();
    }

然后,您必须添加一个cron作业,该作业每隔几分钟(或您希望的任何时间范围)运行一次,以运行这些命令。

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

这将检查适当的任务并相应地运行它们。

希望有帮助。随时询问您是否有任何疑问。

答案 2 :(得分:1)

要使事情以我认为的方式自动实现,您可能希望设置计划任务。您可以创建一个简单的Artisan命令来执行检查并非常快地删除记录。

Laravel 5.6 Docs - Artisan Console - Writing Commands

然后,您将以一定的时间间隔从调度程序调用此任务。每天一次atm可能很好,这取决于数据库范围的准确性有多重要。

Laravel 5.6 Docs - Task Scheduling - Defining Schedules

由于缺少cron或其他可以自动调用调度程序的选项,您将不得不手动调用它,或者以某种方式使用传入的请求作为可能在某个时间间隔运行此任务的方式。如果您要排队,则可以解雇工作,将其移到队列中。