Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SF][SF2][Symfony2]Nie pobiera danych z bazy danych
Crash89
post
Post #1





Grupa: Zarejestrowani
Postów: 191
Pomógł: 7
Dołączył: 3.04.2013

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


Mam taki problem, otóż wszystko działa prawie prawidłowo. Chcę pobrać z bazy informację czy użytkownik juz zagłosował na dany product i na jeden produkt są zwracane dane ale na inne nie.
Mimo tego że gdy w phpmyadmin ręcznie wpisując dane wszystko się zgadza.

To jest kod który to obsługuje:

  1. public function checkIfUserVote($user, $product)
  2. {
  3. if($user === 'anon.')
  4. {
  5. return true;
  6. }
  7.  
  8. $rate = $this->em->getRepository('AppBundle:Rate')->getRateProductUser($user->getId(),$product->getId());
  9.  
  10.  
  11.  
  12. if(!empty($rate))
  13. {
  14. return false;
  15. }else{
  16. return true;
  17. }
  18. }


i w repozytorium:

  1.  
  2. public function getRateProductUser($productId, $userId)
  3. {
  4. return $this->createQueryBuilder('r')
  5. ->where('r.product = :product AND r.user = :user')
  6. ->setParameter('product',$productId)
  7. ->setParameter('user',$userId)
  8. ->getQuery()
  9. ->getResult();
  10. }


Ten post edytował Crash89 27.11.2016, 11:40:41
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Cytat
po getQuery() zamiast getResult() daj getSql() i zobacz, jakie zapytanie jest wykonywane
- nie ma takiej potrzeby, każde zapytanie jest wyświetlone w profilerze.

  1. if($user === 'anon.')
  2. {
  3. return true;
  4. }

1. User to jest nazwa użytkownika, login, obiekt "user", status jakiś? Nazwa zmiennej powinna odzwierciedlać jej zawartość.
2. Metoda nazywa się "checkIfUserVote" a sprawdza czy user to string "anon.", za chwilę założysz temat "dlaczego użytkownik ma zaznaczone, że głosował jak nie oddał głosu"

  1. $this->em->getRepository('AppBundle:Rate')
- nie powinno się tworzyć repozytoriów w taki sposób, lecz deklarować je jako serwisy oraz dostarczać jako zależność. Inaczej znów tworzymy sobie problem.

I po co używasz Doctrine skoro i tak nie używasz obiektów a do najprostszych zapytań piszesz DQL?
Przecież wystarczy:
  1. $product = $user->getProduct();
  2. //lub, gdy user ma wiele produktów
  3. $product = $user->getProducts()->filter();

Ewentualnie ->matching lub ->findBy, do DQLa jeszcze dużo brakuje. A jeśli nie chcesz używać ORMa (bo nie ma takiego obowiązku przecież) to nie prościej używać tylko PDO?

Trzeba po prostu lepiej organizować kod bo inaczej zawsze będą problemy a w dodatku ciężko będzie cokolwiek poprawić.
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: 14.10.2025 - 14:51