搜索

首页  >  问答  >  正文

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

<p>我目前正在使用 Laravel 9 进行我的第一个实际项目。我遇到了一个无法解决的问题。我有两个表“类别”和“文章”,它们与字段 id(类别表)和category_id(文章表)连接。</p> <p>在我的 CategoryController 中:</p> <pre class="brush:php;toolbar:false;">public function categories(){ $categories = Category::all(); $articles = Article::all(); return view('category.categories')->with('cats',$categories)->with('arts',$articles); }</pre> <p>我的 Blade 视图设置如下:</p> <pre class="brush:php;toolbar:false;"><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</pre> <p>当我签入时,我得到了这个</p> <pre class="brush:php;toolbar:false;">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</pre> <p>我该如何解决这个问题,这样它只显示一次“类别 5 下没有文章”</p>
P粉268654873P粉268654873533 天前559

全部回复(1)我来回复

  • P粉111641966

    P粉1116419662023-09-01 09:04:18

    我会确保您的模型中的关系已建立。

    在您的类别模型中:

    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>

    回复
    0
  • 取消回复