Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony2][SF][SF2] TWIG - obróbka danych wejściowych
Forum PHP.pl > Forum > PHP > Frameworki
damianooo
Mam tablicę 80cio elementową gdzie każdy element jest tablicą z takimi wartościami: ID_MECZ, UZYTKOWNIK, TYP (dane pobrane za pomocą QueryBuildera w Repository)

  1. array(80) {
  2. [0]=>
  3. array(7) {
  4. ["meet_id"]=>
  5. int(1)
  6. ["host"]=>
  7. string(12) "FC Barcelona"
  8. ["guest"]=>
  9. string(11) "Real Madryt"
  10. ["hostType"]=>
  11. int(0)
  12. ["guestType"]=>
  13. int(2)
  14. ["username"]=>
  15. string(6) "Damian"
  16. ["term"]=>
  17. string(23) "Wtorek,12-12-2016,21:00"
  18. }


Potrafię wyświetlić dla każdego meczu typy wszystkich użytkowników jednak potrzebuję uwzględniać jakoś użytkowników, którzy nie wytypowali jeszcze (każdy użytkownik chcę by miał swoją stałą rubrykę na typy).
Obenie niestety wyświetlają mi się typy tylko tych co wytypowali i to jeden przy drugim.

Nie wiem jak to rozgryźć ponieważ już mam 2 pętle w TWIG ... zastanawiam się czy nie potrzebuję kolejnej pętli .
Poza tym listę meczy już musiałem pobrać osobnym zapytaniem z użyciem TWIG Extension.

  1. <tr>
  2. <th></th>
  3. <th></th>
  4. </tr>
  5. {% for meet in get_meets(find_matchday(app.request.get('matchday'))) %}
  6. <tr>
  7. <td>{{ meet.hostTeam }} - {{ meet.guestTeam }}</td>
  8. {% for type in types %}
  9. {% if(meet.id == type.meet_id) %}
  10. <td>{{ type.hostType }} - {{ type.guestType }}</td>
  11. {% endif %}
  12. {% endfor %}
  13. </tr>
  14. {% endfor %}
  15. </table>


Będę wdzięczny za podpowiedź
bostaf
Użytkowników, którzy jeszcze nie typowali znajdziesz odejmując z kolekcji wszystkich userów tych, którzy już typowali. Możesz ich dodać jako kolejne wiersze w tej tabeli którą już masz.
Albo na odwrót - najpierw loopując po wszystkich userach wyświetlaj typy tylko tym, którzy typowali.
damianooo
zastanawiałem się już nad dopisywaniem tych brakujących ale musi być zachowana zawsze ta sama kolejność użytkowników typujących .

A ten drugi sposób o którym piszesz to próbowałem to zrobić ale to też nie zdaje egzaminu - za dużo zapytań wychodzi na stronę.

Chyba że nie zrozumiałem pomysłu więc proszę pokaż jak to widzisz.
robert0770
a nie możesz zrobić sobie tak query buildera że wyciągasz wszystkich użytkowników a potem left joinem typy każdego usera z określonego meczu(sprintu)?
tak byłoby najlepiej
damianooo
Pomógł mi już nospor w dziale PHP .
Zrobiłem dwa osobne zapytania a następnie w PHP połączyłem.

Poniżej cała funkcja:

  1. public function getUsersTypes($matchday){
  2.  
  3. // 1. Pobieram typy użytkowników
  4. $sql = 'SELECT t.meet_id,t.host_type AS hostType,t.guest_type AS guestType,u.username AS username '
  5. . 'FROM user u LEFT JOIN type t ON t.user_id = u.id '
  6. . 'WHERE u.STATUS = :status ORDER BY u.id';
  7. $params = array('status' => 1);
  8. $usersTypes = $this->getEntityManager()->getConnection()->executeQuery($sql, $params)->fetchAll();
  9.  
  10. // 2. Pobieram mecze w danej kolejce
  11. $meetRepo = $this->getEntityManager()->getRepository('AppBundle:Meet');
  12. $meets = $meetRepo->getMeetsPerMatchday($matchday);
  13.  
  14. $result = array();
  15.  
  16. // 3. Złączenie dwóch powyzszych zapytań
  17. foreach($meets as $meet){
  18. foreach ($usersTypes as $types){
  19. if($meet['meet_id'] == $types['meet_id']) {
  20. $result[$types['meet_id']]['types'][] = $types['hostType'].' - '.$types['guestType'];
  21. }
  22. if($types['meet_id'] == NULL){
  23. $result[$meet['meet_id']]['types'][] = '-';
  24. }
  25. }
  26. $result[$meet['meet_id']]['meet_id'] = $meet['meet_id'];
  27. $result[$meet['meet_id']]['host'] = $meet['host'];
  28. $result[$meet['meet_id']]['guest'] = $meet['guest'];
  29. }
  30.  
  31. return $result;
  32. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.