- Mam sobie listę złożonych wniosków w panelu admina w różnych kategoriach - Obok każdej kategorii chcę umieścić liczbę NOWYCH, nie rozpatrzonych przez admina wniosków
Wszystko to jest oparte na AngularJS, więc w Symfony jest to REST API.
I teraz nie wiem jak tą liczbę nowych wniosków wykonać. Czy: - wysyłać nowy request do API z liczbą nowych wniosków w danej kategorii (trochę głupie, nawet bardzo) - wysyłać to do Angulara razem z obiektem kategorii, czyli np. category_name: Sport nierozpatrzone: 14
Ten drugi sposób uważam za bardziej poprawny, więc: - jak wykonać to od strony Symfony, tj. w encji z kategorią wniosków dodać pole unread (które będzie bez adnotacji @ORM, czyli bez odzwierciedlenia w bazie) i później po pobraniu kategorii przepuścić je przez foreach i dopisać do tego pola "unread" liczbę nierozpatrzonych wniosków ? (⌐͡■͜ʖ͡■) Januszowe bardzo, tak więc nie wiem w jaki sposób to rozwiązać :(
@MacDada: to z FOSRestBundle, zwraca do przegladarki zserializowane $events. Jestem na takim etapie programowania, że jeszcze testów nie piszę - jakoś ogólnie wydają mi się niepotrzebne.
@Jurigag: [Semantical Error] line 0, col 85 near 'FROM AppBundle:Event': Error: Class 'FROM' is not defined.(╯︵╰,) Kod: $query = $em->createQueryBuilder() ->select('a,(SELECT
@Spake: Nie wiem jak tam się robi te różne magie w FOSRestBundle, ale popatrz na mój poprzedni komentarz – możesz to sobie zliczyć metodą w obiekcie kategorii. Więc chyba podczas serializacji możesz powiedzieć, żeby użył sobie tej metody przy zwracanych danych.
jeszcze testów nie piszę - jakoś ogólnie wydają mi się niepotrzebne
@Spake: Mnie wiele nauczyły jaki kod jest dobry a jaki kiepski – jeśli trudno się kod testuje, to raczej jest kiepski i zmusza mnie to do szukania „jak zrobić lepiej”.
Stąd mocno polecam: nie tylko, żeby mieć pewność wobec swojego kodu przy przyszłych zmianach, ale też dla samorozwoju jako programisty.
@MacDada: Dobra, dzięki, to na dniach sobie poczytam o testach ( ͡°͜ʖ͡°) @Jurigag: Wielkie dzięki, ogarnąłem już to zapytanie i tak zrobiłem, dzięki ! Jeszcze jedno pytanko - da się zrobić tak, aby nie
@MacDada: jakie rzeźbienie dqlami, to rozwiązałem które podałem jest najszybsze, w dodatku jak ma rest api to tutaj wszędzie będzie miał zwracane w twoim przypadku PEŁNE OBIEKTY, nie wiem na h-j mu one, @Spake: zamień getResult() na getArrayResult(), pozbędziesz się zbędnej hydracji do obiektów, jeszcze lepiej zapoznaj się ze słówkiem kluczowym partial w doctrine
@Spake: chyba raczej nie, tak działa mapper w doctrine, dla mnie to o wiele lepsze rozwiązanie niż doklejane jako kolumna w ostatniej encji, przecież to jakaś głupota, czemu akurat w ostatniej a nie np 4 ? XD
@Jurigag: obojętnie w której. Chodzi o to, że w AngularJS jak będę ten obiekt chciał zmodyfikować i zrobić PUT, to mi zwróci obiekt jako event[] + count, zamiast samego event. I API mi tego nie przyjmie, ogólnie to nie jest według zasad REST
@Spake: a co to są zasady rest, nic one nie mówią że obiekty mają być zwracane tak a nie inaczej ? po prostu ogarnij sobie w angularze aby zwracał z tego żeby brał tą pierwszą tablicę, co za problem ? xd nie wiem jak to masz w angularze, ja mam takie api i angulara i nie mam zadnego problemu
@Jurigag: Nie twierdzę że nie. Twierdzę, że może szybkość nie jest priorytetem i można to napisać w oderwaniu od frameworka => co w większości przypadków jest preferowanym rozwiązaniem.
Jeśli szybkość jest takim priorytetem, to może w ogóle olać Doctrine, Symfony i jakieś Bundle? Utworzyć dedykowany plik, routing na nginx'ie, mysqli_query i śmiga 10 razy
@MacDada: no okej, tylko że to nie jest akurat premature optimization, to co napisałem ma spory wpływ na czas zapytań akurat, przeciż po wywaleniu hydracji do obiektów i dodaniu partiali to to zapytanie będzie szybciej chodzić, a co za tym idzie i testy @Spake: na 100% da się jakoś zrobić to, szukaj na stacku albo gdzieś, a jak się nie da to korzystaj dalej z takich gówien które
tylko że to nie jest akurat premature optimization, to co napisałem ma spory wpływ na czas zapytań akurat
@Jurigag: Pozbycie się Symfony i Doctrine będzie miało jeszcze większy wpływ na czas, a jednak tego nie robisz…
Moim zdaniem to jest premature optimization. Napisz to „możliwie najlepiej” pod względem „jakościowym” (czyli testowalne, w oderwaniu od fw, etc). Sprawdź czy zamula na tyle, że zmuszony jesteś optymalizować. Wtedy optymalizuj.
@MacDada: jest, wydajność w doctrine ZAWSZE jest problemem, miałem do czynienia z tym u siebie w projekcie i nawet na najprostszych obiektach i query głupie getArrayResult() przyspieszało request 2-3x
@Jurigag: Ogólnie: robię duże appki i większość kodu piszę bez patrzenia na wydajność. Dopiero na koniec dorzucam jakieś kesze. I dopiero jak widzę, że jest problem, to nawet właśnie wydzielenie takiego pliku poza frameworkiem się zdarza.
Bardzo rzadko z góry kombinuję nad hackami optymalizacyjnymi – bo pomimo że appka jest intensywnie użytkowana i ma miliony rekordów w niektórych tabelkach, to generalnie wydajność jest satysfakcjonująca i wolę się skupić na jakości
- Mam sobie listę złożonych wniosków w panelu admina w różnych kategoriach
- Obok każdej kategorii chcę umieścić liczbę NOWYCH, nie rozpatrzonych przez admina wniosków
Wszystko to jest oparte na AngularJS, więc w Symfony jest to REST API.
I teraz nie wiem jak tą liczbę nowych wniosków wykonać.
Czy:
- wysyłać nowy request do API z liczbą nowych wniosków w danej kategorii (trochę głupie, nawet bardzo)
- wysyłać to do Angulara razem z obiektem kategorii, czyli np.
category_name: Sport
nierozpatrzone: 14
Ten drugi sposób uważam za bardziej poprawny, więc:
- jak wykonać to od strony Symfony, tj. w encji z kategorią wniosków dodać pole unread (które będzie bez adnotacji @ORM, czyli bez odzwierciedlenia w bazie) i później po pobraniu kategorii przepuścić je przez foreach i dopisać do tego pola "unread" liczbę nierozpatrzonych wniosków ? (⌐ ͡■ ͜ʖ ͡■) Januszowe bardzo, tak więc nie wiem w jaki sposób to rozwiązać :(
@Jurigag: [Semantical Error] line 0, col 85 near 'FROM AppBundle:Event': Error: Class 'FROM' is not defined.(╯︵╰,)
Kod:
$query = $em->createQueryBuilder()
->select('a,(SELECT
@Jurigag: Tak, bardzo szybkie. Nawet jak masz kilkaset wartości, to mikrosekundy.
A jak pojawiłby się problem, że jednak tych rekordów jest bardzo dużo, to można zoptymalizować przez
FOSRestBundle
, ale popatrz na mój poprzedni komentarz – możesz to sobie zliczyć metodą w obiekcie kategorii. Więc chyba podczas serializacji możesz powiedzieć, żeby użył sobie tej metody przy zwracanych danych.@Spake: Mnie wiele nauczyły jaki kod jest dobry a jaki kiepski – jeśli trudno się kod testuje, to raczej jest kiepski i zmusza mnie to do szukania „jak zrobić lepiej”.
Stąd mocno polecam: nie tylko, żeby mieć pewność wobec swojego kodu przy przyszłych zmianach, ale też dla samorozwoju jako programisty.
@Jurigag: Wielkie dzięki, ogarnąłem już to zapytanie i tak zrobiłem, dzięki ! Jeszcze jedno pytanko - da się zrobić tak, aby nie
@Jurigag: Nie twierdzę że nie. Twierdzę, że może szybkość nie jest priorytetem i można to napisać w oderwaniu od frameworka => co w większości przypadków jest preferowanym rozwiązaniem.
Jeśli szybkość jest takim priorytetem, to może w ogóle olać Doctrine, Symfony i jakieś Bundle? Utworzyć dedykowany plik, routing na nginx'ie, mysqli_query i śmiga 10 razy
@Jurigag: Pozbycie się Symfony i Doctrine będzie miało jeszcze większy wpływ na czas, a jednak tego nie robisz…
Moim zdaniem to jest premature optimization. Napisz to „możliwie najlepiej” pod względem „jakościowym” (czyli testowalne, w oderwaniu od fw, etc). Sprawdź czy zamula na tyle, że zmuszony jesteś optymalizować. Wtedy optymalizuj.
Ale jeśli z
Bardzo rzadko z góry kombinuję nad hackami optymalizacyjnymi – bo pomimo że appka jest intensywnie użytkowana i ma miliony rekordów w niektórych tabelkach, to generalnie wydajność jest satysfakcjonująca i wolę się skupić na jakości
@Jurigag: Eeee, to nie używaj Doctrine ;)