Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony][Symfony2] Cache wyników
wujek2009
post
Post #1





Grupa: Zarejestrowani
Postów: 350
Pomógł: 31
Dołączył: 23.05.2010

Ostrzeżenie: (0%)
-----


Cześć

Piszę helper, który będzie obsługiwał wszystko co związane z konfiguracją strony internetowej - zastanawiam się w jaki sposób wrzucić zwrócony wynik (przez findAll()) do cache. W tej chwili mam taki kod:
  1. $data = $this->em
  2. ->getRepository('TestApplicationBundle:Configuration')
  3. ->findAll();


W sieci znalazłem "useResultCache", ale patrząc na przykłady znalezione w sieci to działa dopiero przy użyciu "createQuery" - przecież nie będę pisał całego zapytania, jak powyższy kod zwraca mi wszystko to czego potrzebuje. Gdy próbuje połączyć useResultCache i wstawiam przed: findAll() otrzymuje komunikat:
Kod
Undefined method 'useResultCache'. The method name must start with either findBy or findOneBy!


Jeśli zamienię kolejność (na końcu będzie useResultCache) to wówczas zwraca, że wymagany jest obiekt.



Oraz dodatkowe pytanie, mniejszego priorytetu w Kohanie gdy zwracałem wyniki (przez ->as_array()) mogłem jako argument tej funkcji dodać wg. której kolumny ma być zwrócony wynik np. (->as_array('title')) i wówczas zwraca mi wyniki sortowane według klucza "title" - czy w SF2 jest także taka możliwość?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Pytania nie mają za dużego związku z Symfony, dotyczą one Doctrine. Powinieneś w swoim repozytorium utworzyć metodę, która utworzy zapytanie (DQL) i ustawi by wyniki były zapisywane w pamięci. Zaś co do drugiego pytania, doprecyzuj proszę czy chodzi Ci o sortowanie wyników (ORDER BY) czy klucze pod jakimi będą dostępne w zwróconej kolekcji/tablicy (INDEXED BY).

PS. useResultCache() to metoda obiektu Doctrine\ORM\Query, zaś getRepository() zwraca obiekt Doctrine\ORM\EntityRepository - jak łatwo się domyślić, jedno z drugim niewiele ma wspólnego.

Ten post edytował Crozin 25.12.2013, 15:52:02
Go to the top of the page
+Quote Post
wujek2009
post
Post #3





Grupa: Zarejestrowani
Postów: 350
Pomógł: 31
Dołączył: 23.05.2010

Ostrzeżenie: (0%)
-----


W kwestii cache. Zmontowałem taki kod w repozytorium;
  1. $em = $this->getEntityManager()
  2. ->createQuery("SELECT c FROM TestApplicationBundle:Configuration AS c")
  3. ->useResultCache(true, 604800, 'configuration');
  4. $data = $em->getArrayResult();
  5.  
  6. return $data;


Zapytanie zwraca wyniki, ale w profilerze i tak zwraca, że wykonuje się powyższe zapytanie SELECT - nigdzie nie widzę adnotacji, że zapytanie pobierane jest z cache. Czy dobrze zastosowałem "useResultCache" ?

Jeśli chodzi o drugą część pytania to chodziło mi o klucze pod jakimi będą dostępne w zwróconej kolekcji/tablicy.
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
[...] Zapytanie zwraca wyniki, ale w profilerze i tak zwraca, że wykonuje się powyższe zapytanie SELECT - nigdzie nie widzę adnotacji, że zapytanie pobierane jest z cache. Czy dobrze zastosowałem "useResultCache" ?
Na 99% pracujesz w trybie deweloperskim, gdzie domyślną implementacją cache'a jest Doctrine'owski ArrayCache, który jak sama nazwa wskazuje przechowuje cache w pamięci w postaci tablicy, a co za tym idzie po zakończeniu generowania strony przepada, jak i każda inna zmienna PHP.
Cytat
Jeśli chodzi o drugą część pytania to chodziło mi o klucze pod jakimi będą dostępne w zwróconej kolekcji/tablicy.
http://docs.doctrine-project.org/en/latest...#using-index-by
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 17:55