[SF][SF2][Symfony2]Nie pobiera danych z bazy danych |
[SF][SF2][Symfony2]Nie pobiera danych z bazy danych |
27.11.2016, 11:39:50
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:
i w repozytorium:
Ten post edytował Crash89 27.11.2016, 11:40:41 |
|
|
27.11.2016, 12:27:59
Post
#2
|
|
Grupa: Zarejestrowani Postów: 872 Pomógł: 94 Dołączył: 31.03.2010 Ostrzeżenie: (0%) |
po getQuery() zamiast getResult() daj getSql() i zobacz, jakie zapytanie jest wykonywane
|
|
|
27.11.2016, 13:00:08
Post
#3
|
|
Grupa: Zarejestrowani Postów: 191 Pomógł: 7 Dołączył: 3.04.2013 Ostrzeżenie: (0%) |
po getQuery() zamiast getResult() daj getSql() i zobacz, jakie zapytanie jest wykonywane Takie jest wykonywane, czyli dobre:
Dla produktu który znajduje i nie, tworzy takie same zapytania. Użytkownika narazie używam jednego, więc tutaj to nie będzie problem. |
|
|
27.11.2016, 13:04:29
Post
#4
|
|
Grupa: Zarejestrowani Postów: 872 Pomógł: 94 Dołączył: 31.03.2010 Ostrzeżenie: (0%) |
Skoro zapytanie jest dobrze, to znaczy, że problem tkwi gdzieś indziej.
|
|
|
27.11.2016, 13:12:56
Post
#5
|
|
Grupa: Zarejestrowani Postów: 191 Pomógł: 7 Dołączył: 3.04.2013 Ostrzeżenie: (0%) |
|
|
|
27.11.2016, 13:20:46
Post
#6
|
|
Grupa: Zarejestrowani Postów: 872 Pomógł: 94 Dołączył: 31.03.2010 Ostrzeżenie: (0%) |
Do głowy przychodzą mi 2 sposoby zapobiegania takim pomyłkom:
1. przekazuj całe obiekty zamiast ich id 2. niech id będą "value objects" - nie wiem jak to po polsku się nazywa. Np. UserId i ProductId Czemu dobrze zastosować jeden z nich? Niby błąd programisty i kod jest ok, ale gdyby taki błąd był w dużej i skomplikowanej aplikacji (która nie powinna powstać, bo powinna być rozbita na mniejsze usługi, ale załóżmy, że istnieje), to jego znalezienie mogło by być problemem. Dobrze jest po prostu zapobiegać takim sytuacjom. Ten post edytował lukaskolista 27.11.2016, 13:23:36 |
|
|
28.11.2016, 09:00:30
Post
#7
|
|
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. 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" - 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:
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ć. |
|
|
3.12.2016, 18:58:50
Post
#8
|
|
Grupa: Zarejestrowani Postów: 191 Pomógł: 7 Dołączył: 3.04.2013 Ostrzeżenie: (0%) |
- nie ma takiej potrzeby, każde zapytanie jest wyświetlone w profilerze.
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" - 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:
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ć. Metoda IfUserVote dokładnie sprawdza czy użytkownik ma prawo głosu na dany produkt. Sprawdzam czy user jest stringiem bo taką daną zwraca metoda z kontrolera, która pobiera zalogowanego użytkownika. Jeśli nie jest zalogowany to zwraca 'anon.'. Zwracam prawdę bo i tak jeśli nie zalogowany użytkownik zagłosuje to wyświetli mu się strona do logowania, i problem załatwiony. Z tymi zapytaniami do doctrine to chciałem stworzyć zapytanie, które pobierze dany głos (rate) oddany przez zalogowanego użytkownika i dotyczący danego produktu. teraz się dowiedziałem że można to zrobić tak i dql nie jest potrzebny: Myślałem że to jest ograniczone do jednego parametru. |
|
|
Wersja Lo-Fi | Aktualny czas: 20.04.2024 - 02:42 |