[cakePHP] Problemy z relacjami w bazach danych

8 gru 2006

Mam już kilka aplikacji internetowych, które są napisane przy pomocy cake’owego framework’a za sobą. Podczas pierwszych prac nad złożonym panelem administracyjnym dla jednej z firm szkoleniowych korzystałem z jednej z jego zalet czyli ustawianiu relacji między Modelami (czyli też tabelami w bazie danych)

Dla przykładu

http://wiki.cakephp.org/tutorials:book_titles

W w/w przykładzie zdefiniowane są 3 modele: Category, Publisher i Title. Z czego Category i Publisher “hasMany” Title, a Title “belongsTo” Category, Publisher.

Otoż szukając danych w tabeli category poprzez komende $this->Category->findAll(); Cake znajdzie wszystkie kategorie, ale też DODATKOWO poszuka wszystkich tytułów dla danej kategorii. Czy to potrzebujemy czy nie. Czyli z jednego zapytania SQL robi się (1 + liczba znalezionych wyników) dla każdej znalezionej kategorii Cake zada zapytanie SQL dla każdej z kategorii z osobna. Jak to sprawdzić ? ustawić zmienną DEBUG na minimum “2″ w core.php i obserwować tabelke pod spodem z zadanymi pytaniami SQL w danym odświeżeniu strony.

Następnie jeśli wykonamy komende $this->Title->findAll(); (lub też inny find), cake automatycznie dodaje do zapytania LEFT OUTER JOIN do tabeli rodzica. Dodatek ten jak wiadomo wydłuża zapytanie.

Budując większy serwis posiadający dużą liczbę danych takie oto 2 proste komendy potrafią “zabić” stronę.

Jak z tego wybrnąć ?

1. Nie korzystamy z żadnego hasMany hasOne ani BelongsTo

2. w kontrolerze CategoriesController ustawiamy na początku zmienną:

var $uses=array(”Category”,”Title”);
Przez co nakazujemy kontrolerowi korzystać z dwóch w/w modeli.

Możemy też, skorzystać z parametru $recursive w komendach find. Ja osobiście preferuje powyższy sposób, gdyż nie muszę się martwić o niepotrzebne zapytania SQL, ani też o ustawianie parametru funkcji.

Onet - 7% udziału w rynku i nadal spada… :]

21 wrz 2006

Nie ma nic bardziej chorego jak codzienne sprawdzanie pozycji stron swoich i klientów w onecie. z dnia na dzień, strony wypadają z indeksów, wracają, spadają o kilka pozycji to znowóż rosną w góre i tak w kółko. Brak jakiejkolwiek stabilności w wynikach. Niestety nie potrafię jeszcze znaleźć na to recepty i myślę, że długo jej szukać nie będę.

Wg ranking.pl pozycja onetu na rynku polskich wyszukiwarek diametralnie spada z miesiąca na miesiąc. Jeszcze w 2003 roku Onet miał blisko 40% udział w rynku prześcigając nawet Google, na początku tego roku już 9% dziś ma ledwie 7%. Króluje Google z 80% udziałem w rynku.

A jeszcze niedawno (bo pod koniec roku 2005) Onet ruszał z kampanią “Największej polskiej wyszukiwarki”. Na dziś dzień można powiedzieć, że kampania ta tylko spowolniła jej upadek i jej podniesienie jest możliwe tylko przy przebudowie silnika, a potem dopiero uderzając w rynek działaniami marketingowymi.

Równocześnie można dodać, że wyszukiwarka ta czerpie spore zyski z OnetBoksów, które zapewne ludzie masowo i panicznie wykupują przy takich wynikach wyszukiwania. No bo nie ma nic bardziej stabilnego niż płatna pozycja. Ale czy jest sens płacić komuś kto ma 7% udział w rynku ?

Nowa wyszukiwarka - live.com

20 wrz 2006

Na rynku niedawno pojawiła się nowa wyszukiwarka - www.live.com. Do końca ona tak nowa nie jest, gdyż dotychczas była dostępna pod adresem http://beta.search.msn.com.

Jak już ktoś zauważył jest ona powiązana z potentatem w dziedzinie informatyki czyli Microsoftem, który ostatnio ostro uderzył w rynek wyszukiwarek internetowych.

Wg jednej z angielskich gazet już wyszukiwarka osiągnęła dosyć wysoki udział w rynku, prześcigając nawet Google (dane z UK). A wszystko przez to, że w UK sprzedając komputery oraz Windowsy, automatycznie w przeglądarce IE ustawiona jako strona startowa jest właśnie w/w wyszukiwarka. Dzięki znanemu podejściu MS do marketingu, czyli sprzedaży wszystkiego w pakietach, można z czasem liczyć na wysoki udział w rynku tej wyszukiwarki na całym Świecie. Ale czy wyprze Google ?

Wg zaleceń twórców oraz czytając różne testy krążące po sieci, wyszukiwarka ma być bardzo czuła na content i na jego zamiany promując strony często aktualizowane, a co za tym idzie oferujące nowości dla internauty.

Jeśli wyszukiwarka osiągnie wysoką pozycję na rynku to skończy się era “linkowania” i tworzenia całych zestawów nic nie znaczących katalogów stron, a zaczną się pilne poszukiwania copywrighterów przez firmy SEO lub też przez samych webmasterów.

Pożyjemy zobaczymy. Zabieram się do testów.

HT tydzień

20 wrz 2006

W zeszłym tygodniu w niedziele grałem mecz z średnią drużyną, także wygrana przyszła dosyć łatwo.

Wcześniej w środę grałem “klasyczny” sparing ze Ślicznotkami, klasyczny gdyż managerem tej drużyny jest moja narzeczona. Niestety, mój drugi skład nie sprostał Ślicznotkom ulegając im 3-4 w dogrywce.

Dosyć ciekawy pojedynek odbyłem w niedziele. Przeciwnik tydzień wcześniej zaskakująco zremisował z drużyną z pierwszego miejsca 2-2. Spodziewałem się ostrej walki no i tak też było. 20000 widzów oglądało porażkę swojej drużyny jaką zgotowała im drużyna Silence!, pokonując ich 3-2 :) Jak zwykle Eryk Gendera pokazał kunszt strzelając 2 bramki. I jak sprzedać później takiego skrzydłowego ?

Niespodziewanie w tym samym czasie lider tabeli uległ na wyjeżdzie Albatrosom, przez co drużyna Silence! uplasowała się na pozycji lidera :) . Ciekawe ile tam wytrzymam

W poniedziałek odszedł za 2,6mln z drużyny Paweł Komarnicki. Osiągnął wysoki poziom pomocy, trzeba było na nim zarobić :) . Jego miejsce zajął 18 latek z USA Roger Cabral, który w czasie jak pisze tego posta ustrzelił bramke w sparingu :)

Za zarobione pieniadze z Pawła, w niedziele na Silence! Arena przybędzie 8tyś krzesełek :)
W skrócie:

Silence! - Ślicznotki 3 - 4

1-0 Andrzej Stachura (8)
2-0 Andrzej Stachura (35)
3-0 Dietrich Worch (39)
3-1 Andrea Picollo (44)
3-2 Denis Foy (54)
3-3 Adrian Grzebinoga (76)
3-4 Mirek Adamski (92)
Andrzej Stachura (9)
Wincenty Przystalski (17)

Silence! - LKS KOPER 5 - 2

1-0 Gustaw Jurski (17)
1-1 Krzysztof Zwierz (24)
1-2 Wacław Brykczyński (31)
2-2 Jens Zacho Petri (36)
3-2 Rafael Soós (37)
4-2 Edward Pałach (38)
5-2 Ernesti Reema (66)
Paweł Więckowicz (29)
Edward Pałach (54)

nas nie dogoniat - Silence! 2 - 3

0-1 Jens Zacho Petri (41)
1-1 Vasco Plan (43)
2-1 Rene Null (64)
2-2 Eryk Gendera (72)
2-3 Eryk Gendera (87)
Mauro Greco (42)
Eryk Gendera (44)

[cakePHP] favicon.ico i sesje

7 wrz 2006

Podczas walki z pierwszym moim projektem w CakePHP natrafiłem na spory problem, którego nie potrafiłem za żadne skarby zrozumieć. Otóż zapisując dane w Sesjach a następnie próbując pobrać je stamtąd otrzymywałem, że wartość to “favicon.ico”. Tylko skąd to się wzięło skoro zapisywałem nr ID z bazy danych ?

Na rozwiązanie wpadłem przepadkowo testując aplikację w IE (cały czas używam FF) i tam tego problemu nie było, wszystko działało OK. Natchnęło mnie, aby usunąć linijkę o favicon z layoutu. no i zadziałało :)
Problem można usunąć na 2 sposoby:

1. usunąć z layoutu (default.thtml) linijkę o favicon

2. podać w linii wyżej dokładną ściężkę dostępu to iconki
Tak jak pisałem powyżej, problem ten pojawia się tylko w Firefoxie.

3eci HT tydzień

4 wrz 2006

W środę pożegnałem się z pucharem, niestety wynikiem 8-0. Wystawiłem drugi skład, aby nie tracić treningu w z góry przygranym meczu. Spadła mi przez to pewność siebie do nędznej i obawiałem się niedzielnego meczu.

W niedzielę grałem z przeciętnym przeciwnikiem na jego stadionie. Nie za bardzo wiedziałem czym zaskoczyć przeciwnika. Ustawiłem ofensywne 3-5-2 i liczyłem na siłę moje j pomocy. Mecz łatwo wygrałem 4-0. Od razu pewność siebie w drużynie wzrosła.

Po krótce:

Szczerbaki United - Silence!  0 - 4

0-1 Benjamin Thoma (3)
0-2 Benjamin Thoma (30)
0-3 Ernesti Reema (37)
0-4 Gabriel Warowny (75)
Jens Zacho Petri (57)
Davide Angelini (76)

2ga kolejka w VI.852

27 sie 2006

Z Hattrickiem mam do czynienia od września 2005, za namową Tomsona, z ciężkim sercem (bałem się ogromu straconego czasu, poświęconego analizom taktycznym przeciwnika) zapisałem się do tej gry. 3 sezony przesiedziałem w VII lidze. 4 tygotnie temu dostałem się z drugiego miejsca VII ligi do ligi VI.852.

Skończyły się przelewki. Teraz zaczęła się dopiero gra. Specjalne przygotowania taktyczne, ustawiania zawodników pod daną pozycję. Zrobiło się ciekawie.

No i zaliczyłem drugi remis w tym sezonie.

Silence! - Albatross Team 3 - 3

W SKRÓCIE
0-1 Amadeo Straum (10)
0-2 Joaquim Natário (40)
1-2 Dávid Minarik (41)
2-2 Jens Zacho Petri (49)
3-2 Jens Zacho Petri (78)
3-3 Hilbert ten Bruggencate (87)
Stanislas Quirin (77)

Mój pierwszy FrameWork - od dziecka mamie pomagałem “piec ciasta”.

27 sie 2006

Całe życie pisząc jakikolwiek program w jakimkolwiek języku pisałem wszystko od podstaw. Miało to swoje zalety jak i wady. Pełna kontrola zaliczała się do pierwszych lecz poświęcony (ale bardziej tracony) czas zaliczał się do tych drugich. Ostatnimi czasy ułatwiałem sobie życie i pisząc coś w PHP, starałem się korzystać z gotowych elementów. Jednym z takich był FCKEditor którego używałem do moich CMSów. Dodatkowo stworzyłem kilka własnych klas, które modyfikując dostosowywałem do wymogów programu.
Ostatnio przeglądając literaturę oraz fachowe strony www napotkałem na FrameWorki. Przyzwyczajony do własnych rozwiązań z trudem dotknałem tematu. Dzięki namowom normanos’a pobrałem CakePHP.

No i EUREKA !!! 5 linijkami kodu stworzyłem prosty CMS !!!. Mam wrażenie, że od dziś pierwszą rzeczą, którą załąduje na serwer będzie pusty Cake :) No to zabieram się do pieczenia :)

Hello world!

27 sie 2006

Może to głupio zabrzmi, ale postanowiłem założyć własnego blog’a :)

Nie spodziewajcie się tu nowinek, z mojego intymnego życia, bardziej będzie można liczyć na rożnego rodzaju newsy z zawodowej pracy. No może poza Hattrick’iem ;P