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

nom7f22z  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(335)

如何自动删除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'));
}
deikduxw

deikduxw1#

为了让事情像我想的那样自动进行,你可能需要设置一个预定的任务。您可以创建一个简单的artisan命令来执行检查并快速删除记录。
laravel 5.6文档-artisan控制台-编写命令
然后在某个时间间隔从调度程序调用此任务。一天一次就可以了,这取决于数据库范围的准确性有多关键。
laravel 5.6文档-任务调度-定义调度
如果缺少cron或其他可以自动调用调度程序的选项,您就必须手动调用它,或者以某种方式使用传入的请求作为可能在某个时间间隔运行此任务的方式。如果你有一个队列,你可以解雇一个工作这样做了队列。

wljmcqd8

wljmcqd82#

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

2ledvvac3#

您可以使用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

.
这将检查到期的任务并相应地运行它们。
希望有帮助。如果你有任何疑问,尽管问。

相关问题