我的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
时,直到发布日期过去才显示该帖子。
我该如何实现?
答案 0 :(得分:1)
取而代之的是,您获取那些少于当前日期的博客,
Blog::where("publishes_on","<=",Carbon::now())->get();
答案 1 :(得分:1)
您要过滤控制器中的帖子。 除非您打算在其他地方使用未发布的帖子,否则请不要在视图中过滤掉。
类似的东西:
INT
答案 2 :(得分:1)
您可以通过两种不同的方法来执行此操作,最有效的方法是在数据库级别。您可以使查询类似:
$blogs = Blog::where('publishes_on', '<=', now())->get()
如果您希望使用查询范围,也可以将其抽象出来。为此,请在模型上添加以下方法。
public function scopePublished($builder)
{
$builder->where('publishes_on', '<=', now());
}
然后,您可以将其更改为:
$posts = Blog::published()->get()
这样,您传递给视图的唯一帖子就是发布的帖子。
第二个选项是比较视图中的日期/时间。例如:
@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子句就可以了,但是查询范围可以使其更具可读性。
我希望这会有所帮助。