嵌套foreach循环重复行(Laravel 9)



我目前正在用Laravel 9做我的第一个真正的项目。我遇到了一个我解决不了的问题。我有两个表Categories和Articles,它们与字段id (Categories表)和category_id (Articles表)相连接。

In my CategoryController:

public function categories(){
$categories = Category::all();
$articles = Article::all();
return view('category.categories')->with('cats',$categories)->with('arts',$articles);
}

我的Blade视图是这样设置的:

<ul>
@foreach($cats as $cat)
<li>{{ $cat->name}}
<ul>
@foreach($arts as $art)
@if($cat->id == $art->category_id)
<li>{{ $art->title }}</li>
@else
<li>No articles</li> 
@endif
@endforeach
</ul>
</li>
@endforeach

当我签到时,我得到这个

Category 1
Article title 1
No articles
No articles
No articles
No articles
Category 2
No articles
Article title 2
No articles
No articles
No articles
Category 3
No articles
No articles
Article title 3
No articles
No articles
Category 4
No articles
No articles
No articles
Article title 4
No articles
Category 5
No articles
No articles
No articles
No articles
No articles

我如何解决这个问题,所以它只显示一次类别5下没有文章

我会确保你的模型中的关系已经设置好了。

在您的类别模型中:

public function articles()
{
return $this->hasMany(Article::class);
}

然后,在你的CategoryController中:

public function categories(){
$categories = Category::with('articles')->get();
return view('category.categories')->with('cats',$categories);
}

我不是非常确定叶片部分,但你应该能够做到:

<ul>
@foreach($cats as $cat)
<li>{{ $cat->name}}</li>
@if(empty($cat->articles))
<li>No articles</li> 
@else
<ul>
@foreach($cat->articles as $art)
<li>{{ $art->title }}</li>
@endforeach
</ul>
@endif
@endforeach
</ul>

最新更新