![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 90 Pomógł: 0 Dołączył: 3.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam takie pytanie jak użyć podwójnego warunku where. Próbuje tak:
Lecz dostaję error. Kiedyś używałem w ten sposób i działało teraz nie wiem co jest. Zend_Db_Statement_Exception: SQLSTATE[42S22]: Column not found: 1054 Nieznana kolumna 'Array' w where clause |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 9 Dołączył: 20.09.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
A nie lepiej w taki sposób:
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 84 Pomógł: 2 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
A nie jeszcze lepiej zrobić to odwołaniem do Modelu (w końcu jest to framework typu MVC i trzymamy się jakiś standardów):
Ja zrobiłbym to tak:
Odebranie danych w kontrolerze i np. przekazanie ich do widoku, gdzie operujemy później tymi danymi:
Ten post edytował CzarnyGsm 8.05.2012, 10:55:39 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 9 Dołączył: 20.09.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@CzarnyGsm
Po co w select dajesz from ? bez tego się obejdzie ![]() Nie wiadomo ile kolumn zawiera dana tabela i jak wygląda jej użytkowanie(jakie mogą być zapytania do niej). Bo po co pisać 10 różnych metod jak zawsze będziemy wykorzystywać 1 metodę tylko raz ![]() Ostatnio się zastanawiam nad modelem i widzę bez sens pisania metod w modelu chyba, że gdy wykorzystujemy je kilkakrotnie w kontrolerach. Każdy robi jak kto woli ![]() |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Cytat Ostatnio się zastanawiam nad modelem i widzę bez sens pisania metod w modelu chyba, że gdy wykorzystujemy je kilkakrotnie w kontrolerach. To życzę miłego testowania takich kontrolerów. Ogólnie jak najwięcej rzeczy związanych z logiką biznesową aplikacji i pobieraniu skądś danych powinny być w modelach. Też kiedyś myślałem że będę sobie pisał zapytania w kontrolerach i będzie luz bo po co dla każdego zapytania osobna metoda itp. bardzo się na tym przejechałem od tamtego momentu wszystko w modelach ![]() PS. Polecam poszukanie tematu : "Thiny Controllers Fat Models" -------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 9 Dołączył: 20.09.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@melkorm
A w kontrolerze można zapisywać bądź aktualizować rekordy w bazie danych czy raczej też to należy do modelu ![]() |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 84 Pomógł: 2 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
@CzarnyGsm Po co w select dajesz from ? bez tego się obejdzie ![]() Nie wiadomo ile kolumn zawiera dana tabela i jak wygląda jej użytkowanie(jakie mogą być zapytania do niej). Bo po co pisać 10 różnych metod jak zawsze będziemy wykorzystywać 1 metodę tylko raz ![]() Zgadza się, akurat tu jest to niepotrzebne, miałem zamiar podać przykład z , ale w ostatniej chwili zrezygnowałem z niego bo zakładającemu temat raczej chodziło o wszystkie kolumny. Ostatnio się zastanawiam nad modelem i widzę bez sens pisania metod w modelu chyba, że gdy wykorzystujemy je kilkakrotnie w kontrolerach. Każdy robi jak kto woli ![]() Nie jak kto woli, ale jak już piszemy w ZF to stosujmy się do jego standardów. Jest to język obiektowy, a mieszanie kodu i pisanie wszystkiego w jednym pliku tylko 'szpeci' nasz kontroler. Starajmy się być zgodni ze wzrocem MVC. Oczywiście do autora tematu zależy wybór rozwiązania. Tylko niech nie zdziwi się jak przyjdzie mu wyjaśniać dlaczego w kontrolerze umieszcza kod, który powinien znajdować się w modelu. @melkorm A w kontrolerze można zapisywać bądź aktualizować rekordy w bazie danych czy raczej też to należy do modelu ![]() Pozwolisz, że odpowiem na to pytanie. Przykładowo jak chcesz dodać rekordy do bazy korzystając z modelu:
Oczywiście w modelu ExchangeGame tworzysz odpowiednią funkcję addData, która dodaje rekord do bazy. Ten post edytował CzarnyGsm 8.05.2012, 10:51:40 |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Kontroler to tak na prawdę pośrednik, weź coś skądś (zazwyczaj model) i przekaż gdzieś (zazwyczaj widok) i w drugą stronę : odbierz coś skądś (zazwyczaj request HTTP) i przekaż gdzieś + ewentualnie sprawdź dane.
Co do ostatniego punktu ja to rozwiązuje tak :
Ogólnie większość sposobów z którymi się spotkałem to walidacja formularza po stronie kontrolera i jeżeli wszystko OK to przesłanie samych danych do Modelu który zajmuje się czystym zapisem, osobiście rozwiązuje to w taki sposób że do modelu zawsze przekazuje formularz i dane wtedy Model zajmuje się walidacją i sprawdzeniem danych i w przypadku powodzenia zapisuje (robi coś dalej z danymi), a w przypadku niepoprawnych danych wejściowych (walidacja formularza się nie powiodła) rzucam po prostu wyjątek - w tym przypadku na pewno ktoś powie że źle wypełniony formularz nie jest stanem wyjątkowym aplikacji, cóż ja to rozwiązuje w ten sposób, łatwiej mi się to testuje i mam pewność że nigdzie się nie walnąłem z true/false ![]() Cytat Oczywiście do autora tematu zależy wybór rozwiązania. Tylko niech nie zdziwi się jak przyjdzie mu wyjaśniać dlaczego w kontrolerze umieszcza kod, który powinien znajdować się w modelu. Raczej niech się nie zdziwi że zapytanie napisane z `palca` w kontrolerze będzie musiał użyć gdzieś indziej, a nie daj boże już parę razy skopiował kod i będzie musiał coś z nim zmienić, teraz szukaj wszędzie tego użycia itp., albo głupia zmiana nazwy kolumny, tak to praktycznie wszystko jest w Modelu / Modelach i mamy pewność że nic nam nie umknęło ![]() Ten post edytował melkorm 8.05.2012, 10:50:55 -------------------- |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 9 Dołączył: 20.09.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
A teraz pytanie odnośnie relacji w ZF.
Załóżmy, że mamy 3 tabele: users, users_files, files. Tworzymy odpowiednie modele oraz relacje między nimi. W jednej akcji wybieramy użytkownika oraz jego pliki -> czyli piszemy stosowną metodę w Model_User ![]() W drugiej akcji wybieramy tylko użytkownika Gdy mamy więcej tabel połączonych relacją do siebie to czy każdy sposób wyciągnięcia danych musimy opisać w modelu ![]() |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Generalnie tak, na początku może się wydawać że : "OMG! Każde zapytanie inna metoda, ile tego będzie! ola-boga!", a tak na prawdę zawsze jest to skończona ilość i o wiele lepiej się pracuje z takimi modelami
![]() edit: Tak, obie metody powinny się znaleźć w Model_User. Zaś np. wyciąganie plików i nazw użytkownika/ów powinno się znajdować w Model_FIle. Ten post edytował melkorm 8.05.2012, 11:00:47 -------------------- |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 9 Dołączył: 20.09.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Bo właśnie tak kiedyś robiłem i czasem jedną metodę wykorzystywałem tylko raz więc przeniosłem odpowiedzialność na kontrolera.
Dzięki @melkorm ![]() W Model_File powinno się znajdować wyciąganie plików ale czy nazw użytkowników ![]() ![]() Ten post edytował Fluke 8.05.2012, 11:04:20 |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Ogólnie to select w kontrolerach to nic, widziałem gorsze kwiatki, wielokrotnie widzę jak ktoś pobiera w kontrolerze adapter bazy danych i połączenie później operuje na czystym połączeniu MySql/PDO/MySqli i myśli że w 100% wykorzystuje możliwości Zend'a i jest przed wszystkim zabezpieczony =D
... ale to tak na marginesie ![]() PS. Dobra rada, zainteresuje się PHPUnit, bo wtedy można łatwo ocenić swój kod (chociaż nie zawsze ta zasada się sprawdza) im łatwiej pisze się Tobie testy dla Twojego kodu, tym lepszej jakości on jest ![]() Edit: Jeżeli masz Pliki które mają użytkowników i chcesz tych użytkowników to masz kilka rozwiązań w zależności od relacji: 1. One-to-One: Zwykły JOIN na tabelę userów. 2. Many-to-One: 2 SELECTy, pierwszy wyciąga pliki i zbiera id'ki użytkowników, drugi wybiera userów o podanych ID'kach i to mieszasz. 3. Many-to-many: praktycznie punkt drugi. I wszystko to odbywa się w modelu : Model_File, praktycznie dla przypadku 2 i 3 możesz odpytać o te dane (użytkowników o podanych ID'kach) Model_User oczywiście ![]() Ten post edytował melkorm 8.05.2012, 11:10:43 -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.07.2025 - 01:29 |