Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Klasa DB
Koldy
post
Post #1





Grupa: Zarejestrowani
Postów: 98
Pomógł: 1
Dołączył: 28.06.2009
Skąd: Great Britan

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


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?
Go to the top of the page
+Quote Post
Spawnm
post
Post #2





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




Daj::sobie::z::tym::spokój
Bo::widać::że::brakuje::ci:: doświadczenia

Zainteresuj się frameworkami (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Koldy
post
Post #3





Grupa: Zarejestrowani
Postów: 98
Pomógł: 1
Dołączył: 28.06.2009
Skąd: Great Britan

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


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
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
Koldy
post
Post #5





Grupa: Zarejestrowani
Postów: 98
Pomógł: 1
Dołączył: 28.06.2009
Skąd: Great Britan

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


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.
Go to the top of the page
+Quote Post
Wazniak96
post
Post #6





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

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


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. (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #7





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


A mnie to zaciekawiło...
  1. DB::Select()->OrderBy('page_order', ' = 0');
Go to the top of the page
+Quote Post
Koldy
post
Post #8





Grupa: Zarejestrowani
Postów: 98
Pomógł: 1
Dołączył: 28.06.2009
Skąd: Great Britan

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


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?

Ten post edytował Koldy 31.07.2014, 20:18:37
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #9





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


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.
Go to the top of the page
+Quote Post
Crozin
post
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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.

Ten post edytował Crozin 1.08.2014, 07:52:32
Go to the top of the page
+Quote Post
Koldy
post
Post #11





Grupa: Zarejestrowani
Postów: 98
Pomógł: 1
Dołączył: 28.06.2009
Skąd: Great Britan

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


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.

Ten post edytował Koldy 1.08.2014, 19:34:47
Go to the top of the page
+Quote Post

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: 22.08.2025 - 21:48