在Laravel中使用@foreach时如何排除项目?

时间:2016-08-08 18:18:01

标签: php laravel blade laravel-5.3

如何在Laravel中使用@foreach(刀片)时排除项目?

例如:
用户在文章详细信息页面中有一些文章:

<p>Article detail:</p>
<h2>{{$article->title}}</h2>
<p>{{$article->content}}</p>

<h4>The other articles of this user:</h4>
@foreach ($articles as $article)
<p>{{$article->title}}</p>
@endforeach

问题:
@foreach中,如何排除上面显示的文章?

3 个答案:

答案 0 :(得分:4)

有几种方法可以做到这一点。 如果在模板中检查,一个选项就是简单:

<p>Article detail:</p>
<h2>{{$article->title}}</h2>
<p>{{$article->content}}</p>

<h4>The other articles of this user:</h4>
@foreach ($articles as $otherArticle)
    @if($article->id !== $otherArticle->id)
        <p>{{$article->title}}</p>
    @endif
@endforeach

另一个可能更好的选择是从控制器中的数据中排除主要文章:

function showArticle(Article $article)
{
    $otherArticles =  $article->user->articles->filter(
        function($otherArticle)  use($article) {
            return $otherArticle->id !== $article->id;
        });
    return view('someview')
        ->with('article', $article)
        ->with('otherArticles', $otherArticles);
}

答案 1 :(得分:0)

如果您不想在article

中显示详细信息页面中的The other articles of this user:

在控制器上,您应该在此详细信息页面上发送id of article以查看

在视野

<p>Article detail:</p>
<h2>{{$article->title}}</h2>
<p>{{$article->content}}</p>

<h4>The other articles of this user:</h4>
@foreach ($articles as $article)
    @if($article->id !== $article_id)
        <p>{{$article->title}}</p>
    @endif
@endforeach

article_id的{​​{1}}是variable

发送的controller

答案 2 :(得分:0)

从第二个元素开始使用for循环。

<p>Article detail:</p>
<h2>{{$article->title}}</h2>
<p>{{$article->content}}</p>

@if (count($articles) > 1)
<h4>The other articles of this user:</h4>
@for ($i = 1; $i < count($articles); $i++)
<p>{{$articles[$i]->title}}</p>
@endfor
@endif