Laravel, как отображать контент на основе даты публикации - PullRequest
0 голосов
/ 27 июня 2019

У меня есть несколько сообщений в моем laravel -приложении, которое я хочу отобразить на основе даты их публикации.

Так что, когда я создаю сообщение, которое я установил, дата публикации сохраняется в этом формате 2019-06-27 12:00:00в столбце publishes_on в БД.

В своем блэйд-представлении я использовал циклический просмотр сообщений следующим образом:

@foreach($blogs as $blog)
  <div>
      <h1>{{ $blog->title }}</h1>
      // etc. etc.
  </div>
@endforeach

Итак, когда я, например, установил дату публикации2019-07-21 10:00:00 Сообщение не должно отображаться, пока не истечет дата публикации.

Как этого добиться?

Ответы [ 3 ]

1 голос
/ 27 июня 2019

Вы хотите отфильтровать сообщения в контроллере. Не отфильтровывайте в представлении, если вы не планируете использовать неопубликованные сообщения в других местах.

Что-то вроде:

$blogs = Blog::where('publishes_on', '<=', Carbon::now())->get();
1 голос
/ 27 июня 2019

Вы можете сделать это несколькими разными способами, наиболее эффективный способ - на уровне базы данных.Вы можете сделать ваш запрос примерно таким:

$blogs = Blog::where('publishes_on', '<=', now())->get()

Вы также можете абстрагировать это, если вы предпочитаете область запроса.Чтобы сделать это, добавьте в вашу модель следующий метод:

public function scopePublished($builder)
{
    $builder->where('publishes_on', '<=', now());
}

Это позволит вам изменить его на:

$posts = Blog::published()->get()

Таким образом, единственные посты, которые вы будете пропускатьна ваш взгляд будут те, которые опубликованы.

Опция 2

Второй вариант - сравнить дату / время в представлении.Например:

@foreach($blogs as $blog)
  @if(\Carbon\Carbon::parse($blog->publishes_on)->gte(now()))
    <div>
        <h1>{{ $blog->title }}</h1>
        // etc. etc.
    </div>
  @endif
@endforeach

Однако этот способ не будет таким быстрым.Это потому, что вы сравниваете даты и время на стороне PHP для каждой итерации.Чем больше сообщений вы отображаете, тем больше времени потребуется для загрузки страницы.

Заключение

Вероятно, это лучше всего делать на уровне базы данных.Можно использовать только предложение where, но область запроса может сделать его немного более читабельным.

Надеюсь, это поможет.

1 голос
/ 27 июня 2019

Вместо этого вы выбираете те блоги, которые меньше текущей даты,

Blog::where("publishes_on","<=",Carbon::now())->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...