Laravel - углеродные надбавки () - PullRequest
0 голосов
/ 12 января 2020

Почему на моем клинке ничего не отображается, когда я добавляю $date->addDays(5)? Вот мой контроллер:

use Carbon\Carbon;
...
public function index(){

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

А это мой home.blade.php:

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">All posts
                    <a href="/posts/create" class="btn btn-primary" style="margin-left: 70%">New post +</a></div>
                <hr>
                <div class="card-body">
                    @foreach($posts as $post)
                        @if($post->status == 1)
                            <small style="color:red">PREMIUM POST</small>
                            <hr>
                        @endif
                        <h2>{{$post->name}}</h2><br>
                        <medium>{{$post->body}}</medium>
                        <hr style="border: 1.5px solid grey">
                    @endforeach
                    <small><?php echo now() ?></small>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

Какое решение этой проблемы? После добавления $date->addDays(5);?

EDED: мне нужно, чтобы мои сообщения были видны в течение 5 дней, а после этого - нет. Вот и все, возможно, ошибка в addDays();, потому что если я его удалю, мой клинок теперь показывает мне сообщения, но только на сегодня.

1 Ответ

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

created_at создается current_timestamp, если вы используете addDays(5), вы получите сообщения от функции. Это невозможно.

Честно говоря, вы можете добавить поле с именем expired_date, и сравнение с этим полем будет довольно простым.

используйте laravel миграцию для добавления поля, например

$table->date('expired_date');

И как только вы создадите сообщение, вам нужно установить expired_date с помощью Carbon::now()->addDays(5);

и отфильтровать дату с истекшим сроком больше, чем сегодня.

public function index(){

   $date = Carbon::now();
   $date->addDays(5);
   $posts = Post::where('status','=', 1)->whereDate('created_at','>=', $date)->get();
   return view('home', compact('date', $date))->with('posts', $posts);
}

Если ваш status поле только для различения guish срок действия истек или не истек, я думаю, вам не нужно это поле.

Однако, если вам действительно нужно это поле для поддержания статуса с истекшим сроком действия.

вам нужно обновлять его каждый день, попробуйте использовать Планирование задач

    protected function schedule(Schedule $schedule)
    {
        $schedule->call(function () {
            Post::where('expired_date', '<=', \Carbon\Carbon::today())->update(['status' => 0]);
        })->daily();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...