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
Voici mon repository :
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
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); }
et Voici la vue :
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()) ]); }
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
Partager