Как исключить элемент при использовании @foreach (blade) в Laravel?
пример:
У пользователя есть несколько статей на странице подробностей статьи:
<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
Как исключить статью, которая была показана выше?
Есть несколько способов сделать это.
Один вариант будет простой, если проверить в шаблоне:
<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);
}
Если вы не хотите показывать 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
является variable
вы отправляете из controller
Используйте цикл 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