Bonjour,

J'ai un tableau mais je souhaite le modifier car pas optimisé.

Ce que je souhaite avoir en sortie :
Un tableau avec comme clé l'id du membre et comme valeur le nombre de message non lu. Plus logique que la photo ci-dessous non ?

voici le tableau actuel en photo
Nom : msg.png
Affichages : 146
Taille : 23,6 Ko

Voici mon repository :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
    /**
     * Récupère le nombre de messages non lus pour chaque conversation
     * 
     * @param integer $userId
     */
    public function unreadCount(int $userId)
    {
        return $this->createQueryBuilder("message")
            ->select("author.id, count(message.id) as nb")
            ->join("message.author", "author")
            ->andWhere("message.recipient = :recipient")->setParameter("recipient", $userId)
            ->andWhere("message.readAt is NULL")
            ->groupBy("author.id")
            ->getQuery()->execute(null, Query::HYDRATE_ARRAY);
    }
Voici mon controller :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
    /**
     * @Route("/inbox", name="inbox")
     * 
     * @IsGranted("ROLE_USER")
     */
    public function index(UserRepository $userRepository): Response
    {
        return $this->render('message/index.html.twig', [
            'users' => $userRepository->findAll(),
            'unread' => $this->repository->unreadCount($this->getUser()->getId())
        ]);
    }
et Voici la vue :
Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
{{ dump(unread) }}
 
            {% for user in users %}
            {% if app.user.id != user.id %}
            <tr>
                <td>{{ user.id }}</td>
                <td>{{ user.firstName }}</td>
 
                <td>
                    {% for arr in unread %}
                    {% if arr["id"] == user.id %}
                    {{ arr["nb"] }}
                    {% endif %}
                    {% endfor %}
                </td>
 
                <td>
                    <a href="{{ path('messages_show', {'id': user.id}) }}">Ecrire à ce membre</a>
                </td>
            </tr>
            {% endif %}
            {% else %}
            <tr>
                <td colspan="4">no records found</td>
            </tr>
            {% endfor %}

J'ai diminué le code au maximum afin de ne pas faire un trop long post sur le forum.

Je vous remercie