如何过滤foreach的数据?

时间:2019-12-29 16:03:30

标签: laravel

我有这样的设计:

enter image description here

我需要说:我添加的最后一个帖子放在设计的顶部,然后其他帖子放下。

我闭嘴:) HTML和foreach代码:

@if ($user->projects->count() > 0)
<section class="latest section shadow-sm">
    <h1>Projects</h1>
    <div class="section-inner">
        @foreach ($user->projects->sortByDesc('id')->take(1) as $project)
            <div class="item featured text-center ">
                // head post
            </div>
        @endforeach

        @foreach ($projects_last->sortByDesc('id') as $project)
            <div class="item row">    
                // other  post
            </div>
        @endforeach
    </div><!--//section-inner-->                
</section><!--//section-->
@endif

$projects_last的控制器代码:

$projects_last = $user->projects;
$projects_last->pop();

return view('frontend.user_profile',compact('user','projects_last'));

我有一个问题,当我说@if ($user->projects->count() > 0)没有显示任何东西但仍然向我显示<h1>Projects</h1>时,即使它是空的!

如果您有任何建议使我的代码更好,请感谢:)

1 个答案:

答案 0 :(得分:1)

要迭代Collections,必须先获取它们。因此,您必须使用get()来获得结果。

...
@foreach ($user->projects->sortByDesc('id')->take(1)->get() as $project)
...

...
@foreach ($projects_last->sortByDesc('id')->get() as $project)
...

您可以在此处查看文档:{​​{3}}

注意:如果只想在第一个foreach循环中获得一个元素,则可以使用first()代替take(1)。您的代码将像这样:

@php($first_project = $user->projects->sortByDesc('id')->first())
@if (!is_null($first_project))
// Use $first_project as $project variable 
@enif