Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony][Symfony2] czy mogę w klasie Entity reprezentującej tabele wykonać zapytanie?
wiewiorek
post
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 11
Dołączył: 5.09.2009

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


Mam klasę KategorieEntity i ZdjeciaEntity. W widoku w pętli wyświetlam wszystkie kategorie, jednak chciałbym wywołać moją metodę pobierzNazweMiniaturyKategorii() z KategorieEntity na obiekcie reprezentującym pojedynczą kategorię, tzn. w widoku mam:

  1. <?php foreach ($kategorie as $kategoria): ?>
  2. <?php echo $kategoria->getNazwa() ?>
  3. <img src="<?php echo $view['assets']->getUrl('uploads/'.$kategoria->pobierzNazweMiniaturyKategorii($kategoria->getId())) ?>" />
  4. <?php endforeach; ?>


W klasie KategorieEntity:
  1. class KategorieEntity
  2. {
  3. protected $id;
  4.  
  5. protected $nazwa;
  6.  
  7. //moja metoda:
  8. public function pobierzNazweMiniaturyKategorii($idKategorii)
  9. {
  10. $zdjecie = $this->getEntityManager()
  11. ->createQuery('SELECT z FROM AcmeStronaBundle:ZdjeciaEntity z
  12. JOIN z.kategoria k
  13. WHERE k.id = :idKategorii AND z.glowneKategorii = true')
  14. ->setParameter('idKategorii', $idKategorii)
  15. ->getSingleResult();
  16.  
  17. return $zdjecie->getNazwaMiniatury();
  18. }
  19.  
  20.  
  21. ................
  22. }


Niestety wykonanie zapytania w klasie Entity i wywołanie metody z tej klasy w widoku chyba nie jest mozliwe, bo to nie działa (nie jest też wyświetlany komunikat błedu), więc jak to zrobić?

Ten post edytował wiewiorek 21.03.2012, 14:23:21
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
destroyerr
post
Post #2





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


Cytat
To jest chyba jednak najlepsze rozwiązanie

To jest akurat jedno z najgorszych rozwiązań: zapytanie w kontrolerze w dodatku w pętli i do tego jeszcze polskie nazewnictwo wymieszane z angielskim.
Go to the top of the page
+Quote Post
wiewiorek
post
Post #3





Grupa: Zarejestrowani
Postów: 247
Pomógł: 11
Dołączył: 5.09.2009

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


Cytat(destroyerr @ 21.03.2012, 20:40:08 ) *
To jest akurat jedno z najgorszych rozwiązań: zapytanie w kontrolerze w dodatku w pętli i do tego jeszcze polskie nazewnictwo wymieszane z angielskim.


Akurat jedyne działające, podobnie jak to - update z joinem w DQL, nie mam dostępu do id_kategorii w ZdjeciaEntity więc żeby zrobić update muszę użyć joina, ale co fajniejsze to zapytanie nie działa (nikt na google groups doctrine nie wiedział i na forum symfony również co jest nie tak):
  1. $this->getEntityManager()
  2. ->createQuery('UPDATE AcmeStronaBundle:ZdjeciaEntity z
  3. JOIN z.kategoria k
  4. SET z.glowneZdjecie = false
  5. WHERE k.id = :idKategorii')
  6. ->setParameter('idKategorii', 5)
  7. ->execute();


Rozwiązałem więc to tak - zrobić najpierw selecta, a potem update:
  1. $zdjeciaGlowneKategorii = $this->getEntityManager()
  2. ->createQuery('SELECT z FROM AcmeStronaBundle:ZdjeciaEntity z
  3. JOIN z.kategoria k
  4. WHERE k.id = :idKategorii AND z.glowneKategorii = true')
  5. ->setParameter('idKategorii', $idKategorii)
  6. ->getResult();
  7.  
  8. foreach($zdjeciaGlowneKategorii as $zdjecieGlowneKategorii)
  9. {
  10. $this->getEntityManager()
  11. ->createQuery('UPDATE AcmeStronaBundle:ZdjeciaEntity z SET z.glowneKategorii = false')
  12. ->execute();
  13. }
  14.  


Ah jakie to Symfony 2 jest cudowne, tyle rzeczy trzeba robić naookoło. (IMG:style_emoticons/default/tongue.gif)

A co do mieszania polskiego z angielskim, zawsze tak robię jak uczę się nowych technologii, robię to od momentu jak kiedyś uczyłem się WinAPI - wówczas pisałem wszystko po angielsku, a jak wróciłem do kodu po miesiącu to nie wiedziałem już co jest mego autorstwa a co było częścią WinAPI. Może to i głupie oraz nieeleganckie, ale potem przynajmniej wiem i nie muszę szukać czy daną metodę napisałem ja czy jest częścią danej technologii. Takie postępowanie wielokrotnie zaoszczędziło mi sporo czasu. Gdy tylko dochodzę do wniosku, że znam już w miarę dobrze daną technologię to przestawiam się na angielski.

Ten post edytował wiewiorek 22.03.2012, 07:03:34
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 6.10.2025 - 20:36