Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Klasa DB
Forum PHP.pl > Forum > Przedszkole
Koldy
Czesc wszystkim,
jestem w trakcie budowanie klasy Database no i zbudowalem juz klase do budowania zapytan, dzieki czemu wartosci sa przyjmowane typu:
  1. protected function _getMenuItems($id=0) {
  2. DB::Select()->Column(NULL, '*');
  3. DB::Select()->From('pages');
  4. DB::Select()->Where('page_parent_id', '=', $id);
  5. DB::Select()->Where('page_is_adm', '=', 0);
  6. DB::Select()->OrderBy('page_order', ' = 0');
  7. DB::Select()->OrderBy('page_order');
  8. if (DB::Run())
  9. return DB::getResults(DB::RET_FETCHALL);
  10. }


I tak dochodze do wniosku po tym wszysktim czy gra jest warta swieczki, chodzi o to ze sam juz nie wiem czy nie bylo by lepiej wklepac to jako SQL i poprostu zbudowac mala klase do przechwytywania sql oraz bindowanych wartosci, jedyne plusy chyba jakie sa z mojego skryptu to prostota debugowania i czytelnosc wprowadzania danych, ale tak sie zastanawialem ze czyste SQL w postaci tekstu bylyby o niebo szybsze, czyz nie?

Mozecie mi doradzic czy warto taka klase budowac, czy lepiej dac sobie z tym spokoj?
Spawnm
Daj::sobie::z::tym::spokój
Bo::widać::że::brakuje::ci:: doświadczenia

Zainteresuj się frameworkami wink.gif
Koldy
Ogolnie natrafilem chwile temu na stwierdzenie ze metody statyczne sa wysoce nieporzadane, moglby mi ktos przedstawic dlaczego, bo jakos nie moge znalezc odpowiedzi konkretnej, a widze w Twojej wypowiedzi ironie z tymi ::
Co do frameworkow, tak, czesto widze w odpowiedziach zeby od tego zaczynac, wiec sciagnalem dokumentacje oraz aplikacje ZendFramework, mam nadzieje ze nie okaze sie zbyt trudny i zabieram sie do lektury.

Pozdrawiam
Crozin
OOP -> Object-Oriented Programming, a Ty nie masz żadnych obiektów, przez co na dobrą sprawę narzędzia oferowane przez OOP kompletnie mijają się z celem. Ba! Dodają one tutaj jedynie problemów zamiast przyczyniać się do poprawienia czegokolwiek.
Koldy
Jak nie mam zadnych obiektow?
Kazda z klas

Select, Insert dizedziczy po klasy QueryBuilder, a to jest wszytstko w klasie DB, ktora tym steruje, wiec jak nie ma obiektow, nie rozumiem.
Wazniak96
Kożystając z metod statycznych nie tworzysz żadnych obiektów. Obiekt tworzymy poprzez new.

Więc lepiej skończ z tą marysią i skup się pożądanie na lekturze. Bo praktycznie w każdym kursie OOP jest napisane co to obiekt. smile.gif
mmmmmmm
A mnie to zaciekawiło...
  1. DB::Select()->OrderBy('page_order', ' = 0');
Koldy
Cytat
Więc lepiej skończ z tą marysią i skup się pożądanie na lekturze

Po pierwsze nie oceniaj mnie po avatarze, po drugie nie wrzucaj wszystkich ludzi do jednego worka.
Ciesze sie ze starasz sie pomoc, ale mysle ze tu mam racje, owszem klasa DB tworzy obiekt, bo jest oparta na Singleton, poza tym kazdy kolejny obiekt to:
Select, Insert, Delete, etc.

Do tych obiektow odwoluje sie przez metody Select(), Insert()

Wiec albo ja czegos nie rozumiem, albo te obiekty wyparowuja i ich nie ma?

Up, tworzt to zapyytanie:
page_order = 0, page_order, zeby elementy zero byly na koncu, czy to zle?
zpaisalem to tak, a nie ('page_order', '=', 0) poniewaz wtedy wartosc zostala by zamieniona na pytajnik, a zero dodane to tabilcy ValuesToBind; wiec chcialem uniknac bindowania bo go nie potrzebuje.


Btw. korzystac piszemy przez RZ, pozdrawiam

edit: nawet zaimplementowalem leniwa konkretyzacje na Select, Delete etc., obiekt jest tworzony tylko wtedy kiedy jest potrzebny, wtedy kiedy zmeinna np Select() jest uzyta po raz pierwszy.
Czy to nie o to chodzi?
mmmmmmm
Cytat(Koldy @ 31.07.2014, 20:57:11 ) *
Up, tworzt to zapyytanie:
page_order = 0, page_order, zeby elementy zero byly na koncu, czy to zle?
zpaisalem to tak, a nie ('page_order', '=', 0) poniewaz wtedy wartosc zostala by zamieniona na pytajnik, a zero dodane to tabilcy ValuesToBind; wiec chcialem uniknac bindowania bo go nie potrzebuje.

Wcześniej zapisałeś tak:
  1. DB::Select()->OrderBy('page_order', ' = 0');
  2. DB::Select()->OrderBy('page_order');

Z tego co wiem, a w bazach danych robię trochę czasu, Order By przyjmuje dwa parametry:
1. Wyrażenie (kolumna, funkcja, numer kolumny, etc)
2. Kierunek sortowania (ASC - domyślny i DESC)
(całość może występować wiele razy)
W swoim drugim OrderBy nie podałeś drugiego parametru, więc domyślnie powinno być ASC. Natomiast w pierwszym jest coś dziwnego '= 0' - nie jest to ani ASC, ani DESC. Jeśli chciałeś użyć wyrażenia, to trzeba to było zrobić wyrażeniem, jak na w Zend...
Coś mi się wydaje, że koło wymyślasz... Tylko jakieś takie kanciate ci wychodzi.
Crozin
1. Faktycznie, moje niedopatrzenie. Może i metody DB::select() zwracają już obiekt, ale:
1.1. Wykorzystanie Singletona jest tutaj, jak w niemal każdym przypadku, złym rozwiązaniem, które tworzy jedynie masę problemów - nie zbudujesz sobie przykładowo dwóch zapytań równocześnie.
1.2. Powinieneś pracować na obiekcie klasy DB, który to może zwracać kolejne obiekty, a nie na klasach.

Jak już to powinieneś skończyć mniej-więcej z czymś takim:
  1. $queryBuilderA = $db->createSelectBuilder();
  2. $queryBuilderB = $db->createUpdateBuilder('page');
  3.  
  4. $queryA = $queryBuilderA->select('*')->from('page')->where(...)->where(...)->orderBy(...)->orderBy(...)->getQuery(); // korzystanie z method chainingu jest oczywiście opcjonalne
  5. $queryB = $queryBuilderB->set(...)->where(...);
  6.  
  7. $db->run($queryB);
  8. $result = $db->run($queryA);


@mmmmmmm: ORDER BY col_name = 0, col_name jest w pełni poprawne i ma konkretny cel (rekordy posortowane rosnąco, ale te o wartości równej zero na samym końcu). col_name = 0 to przecież nic innego jak wyrażenie.
Koldy
W koncu ktos dal sensowna odpowiedz, dziekuje, sprobuje stworzyc cos takiego i wywalic singletona.

Pozdrawiam

@mmmmmmm: na poczatku mialo to byc tak ze: OrderBy('column = 0'), ale nie chcialem mieszac w metodzie bo do pierwszego argumentu dodaje ` `, wiec wyszlo by cos takiego: `column = 0`, tego nie chcemy.
dwa, faktycznie bindowanie nie potrzebne jest, jest i je wyrzucilem, co do ASC/DESC tak ASC jest dodawany kiedy arg2 jest nie podany.
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.