Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Symfony2] Cache wyników
Forum PHP.pl > Forum > PHP > Frameworki
wujek2009
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ść?
Crozin
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.
wujek2009
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.
Crozin
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
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.