recherche

Maison  >  Questions et réponses  >  le corps du texte

La boucle foreach imbriquée répète des lignes (Laravel 9)

<p>Je travaille actuellement sur mon premier vrai projet utilisant Laravel 9. J'ai rencontré un problème que je n'arrive pas à résoudre. J'ai deux tables "category" et "article" qui sont jointes aux champs id (table de catégories) etcategory_id (table d'articles). </p> <p>Dans mon CategoryController : </p> <pre class="brush:php;toolbar:false;">catégories de fonctions publiques(){ $categories = Catégorie :: tout (); $articles = Article :: tous (); return view('category.categories')->with('cats',$categories)->with('arts',$articles); }</pré> <p>Ma vue Blade est configurée comme ceci :</p> <pre class="brush:php;toolbar:false;"><ul> @foreach($chats comme $cat) <li>{{ $cat->nom}} <ul> @foreach($arts comme $art) @if($cat->id == $art->category_id) <li>{{ $art->title }}</li> @autre <li>Aucun article</li> @fin si @endforeach </ul> ≪/li> @endforeach</pre> <p>Lorsque je suis arrivé, j'ai reçu ceci</p> <pre class="brush:php;toolbar:false;">Catégorie 1 Titre de l'article 1 Aucun article Aucun article Aucun article Aucun article Catégorie 2 Aucun article Titre de l'article 2 Aucun article Aucun article Aucun article Catégorie 3 Aucun article Aucun article Titre de l'article 3 Aucun article Aucun article Catégorie 4 Aucun article Aucun article Aucun article Titre de l'article 4 Aucun article Catégorie 5 Aucun article Aucun article Aucun article Aucun article Aucun article</pre> <p>Comment puis-je résoudre ce problème pour qu'il n'affiche qu'une seule fois « Aucun article dans la catégorie 5 » ?</p>
P粉268654873P粉268654873533 Il y a quelques jours558

répondre à tous(1)je répondrai

  • P粉111641966

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

    Je m'assurerais que les relations dans votre modèle sont établies.

    Dans votre catégorie modèle :

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

    Ensuite, dans votre CategoryController :

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

    Je ne suis pas sûr pour la partie lame, mais vous devriez pouvoir le faire :

    <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>

    répondre
    0
  • Annulerrépondre