簡體   English   中英

Laravel如何根據發布日期顯示內容

[英]Laravel how to display content based on publish date

我的laravel -application中有多個帖子,我想根據其發布日期顯示這些帖子。

因此,當我創建帖子時,我將發布日期設置為此格式2019-06-27 12:00:00保存在2019-06-27 12:00:00中的publishes_on 2019-06-27 12:00:00中。

在我的刀片視圖中,我曾經這樣遍歷這些帖子:

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

因此,當我將發布日期設置為2019-07-21 10:00:00 ,直到發布日期過去,才應顯示該帖子。

我該如何實現?

取而代之的是,您獲取那些少於當前日期的博客,

Blog::where("publishes_on","<=",Carbon::now())->get();

您要過濾控制器中的帖子。 除非您打算在其他地方使用未發布的帖子,否則不要在視圖中過濾掉。

就像是:

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

您可以通過幾種不同的方法來執行此操作,最有效的方法是在數據庫級別。 您可以使查詢類似:

$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子句就可以了,但是查詢范圍可以使其更具可讀性。

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM