Partage
  • Partager sur Facebook
  • Partager sur Twitter

Compter items dans une PersistentCollection twig

    2 juillet 2020 à 19:58:49

    Bonjour,

    Je tente de compter le nombre d'événements que j'ai dans une catégorie particulière.

    J'ai plus de 600 000 événements enregistrés en bdd, et par exemple ma catégorie Fêtes contient 16776 événements.

    Voici mon code :

    {% for category in categories %}
    <div class="swiper-slide popular-item">
        <div class="single-place">
            <img class="single-place-image" src="{{ asset('images/category/' ~ category.marker) }}" alt="place-image">
            <div class="single-place-content">
                <h2 class="single-place-title">
                    <a href="{{ path('event_list_category', {'slug' : category.slug}) }}">{{ category.title }}</a>
                </h2>
                <ul class="single-place-list">
                    <li><span>{{ category.events.count }}</span> Annonces</li>
                </ul>
                <a class="btn v6 explore-place" href="{{ path('event_list_category', {'slug' : category.slug}) }}">Explorer</a>
            </div>
        </div>
    </div>
    {% endfor %}

    Mon entité Category est en relation OneToMany avec mon entité Event.

    Lors de l'exécution du script j'ai ce message d'erreur :

    [Web Server/PHP ] [02-Jul-2020 19:50:56 Europe/Berlin] PHP Fatal error:  Allowed memory size of 536870912 bytes exhausted (tried to allocate 155648 bytes) in Unknown on line 0

    Et lorsque je fais

    {{ category.events|length }}

    J'ai ce message d'erreur :

    [Web Server/PHP ] Jul  2 19:57:24 |ERROR| SERVER GET  (500) /home ip="127.0.0.1"

    Avec la même erreur par rapport à la mémoire.

    Pourtant j'ai suivi ces indications :

    https://stackoverflow.com/questions/13528472/symfony2-1-count-doctrine-collection-in-twig-template

    Merci pour votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      2 juillet 2020 à 22:56:24

      Salut

      Si ta relation n'est pas signalée comme EXTRA_LAZY, il y aura une requête pour récupérer tous les événements afin que PHP puisse compter le nombre dans la collection qui en résultera. Par contre, ce sera bien une requête par catégorie pour avoir ce nombre.

      Une autre possibilité pour n'avoir qu'une seule requête serait de faire une requête avec count(event.id) et un groupBy(c.id). Attention, la structure des résultats change un peu : au lieu d'un tableau de catégories, tu auras un tableau dont chaque élément est une paire composée d'un objet Category et du nombre d'événements (cf. ce vieux message qui devait encore être d'actualité).

      • Partager sur Facebook
      • Partager sur Twitter

      Compter items dans une PersistentCollection twig

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown