首页 > 解决方案 > Laravel - 过期帖子的碳

问题描述

所以在这个项目中,我必须让帖子在 7 天后过期。我有这段代码,HomeController现在它显示了今天在我的主页上发布的所有帖子:

...
public function index()
    {

        $date = Carbon::now();
        $date->format("Y-m-d");
        $posts = Post::where('status','=', 1)->whereDate('created_at','=', $date)->get();
        return view('home', compact('date', $date))->with('posts', $posts);
    }
...

所以它向我显示了今天发布的所有状态为 1 的帖子,这没关系。但我需要告诉我,帖子不仅是 1 天,而且是 7 天,过期后需要自动删除。我该如何解决这个问题?请帮忙!谢谢!

已编辑

我试过:

...
public function index()
    {

        $current = Carbon::now();
        $date = $current->addDays(7);
        $date->format("Y-m-d");
        $posts = Post::where('status','=', 1)->whereDate('created_at','=', $date)->get();
        return view('home', compact('date', $date))->with('posts', $posts);
    }
...

但什么也没发生。

标签: laravelphp-carbon

解决方案


使用 Carbon,您可以轻松地减去这样的天数:

$posts = Post::where('status', 1)
           ->where('created_at', '>', Carbon::now()->addDays(7))
           ->get();

foreach($posts as $post) {
    $post->delete();
}

您基本上是在比较当前日期并从现在起删除 7 天。之后,您将获得一个帖子集合并删除所有内容。

您可能希望在后台构建删除逻辑,以便系统每天/每天检查是否该删除它。为此,您需要创建CronjobTask

有了它,您可以例如轻松地创建这样的东西:

$schedule->job(new PostRemoveProcess, 'postsremove')->everyWeek();

查看有关此的文档,它解释得非常好。


推荐阅读