Laravel - углерод для истекающих должностей - PullRequest
0 голосов
/ 12 января 2020

Так что в этом проекте мне нужно сделать так, чтобы срок действия сообщений истек через семь дней. У меня есть этот код в моем 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, и это нормально. Но мне нужно показать мне, что сообщения не только на один день, но и на семь дней, а после истечения срока их необходимо автоматически удалять. Как я могу решить это? Пожалуйста помоги! Спасибо!

Отредактировано

Я пробовал:

...
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);
    }
...

, но ничего не происходит.

1 Ответ

1 голос
/ 12 января 2020

Используя Carbon, вы можете легко вычесть дни, например:

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

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

Вы сравниваете текущую дату и удаляете 7 дней с этого момента. После этого вы получаете коллекцию сообщений и удаляете все.

Возможно, вы захотите построить лог удаления c в фоновом режиме, чтобы система каждый день / день проверяла, пора ли удалять его. Для этого вам нужно создать Cronjob или Task .

С этим, например, вы можете легко создать что-то вроде этого:

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

Проверьте документацию относительно этого, это объясняет это действительно хорошо.

...