Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [cakephp] Problem z modelem
Forum PHP.pl > Forum > Przedszkole
mr.r
Dopiero zaczynam swoją przygode z CakePHP, napotkałem na pewien problem podczas budowy modelu odpowiedzialnego za newsy.

Próbuje przerobić poniższe zapytanie:
  1. SELECT a.id,
  2. a.news_title,
  3. a.news_content,
  4. a.news_author,
  5. a.news_date,
  6. COUNT(b.id) AS news_comments_count,
  7. d.user_name
  8. FROM news a
  9. LEFT JOIN comments b ON b.comment_parent = a.id
  10. LEFT JOIN users d ON d.id = a.news_author
  11. GROUP BY a.id
  12. ORDER BY a.id DESC


na model bez większego powodzenia. Narazie tyle mam:
  1. <?php
  2. class News extends AppModel
  3. {
  4. var $name = 'News';
  5.  
  6. var $belongsTo = array('User' =>
  7.  array('className' => 'Users',
  8.  'conditions'  => '',
  9.  'order' => '',
  10.  'foreignKey'  => 'news_author',
  11.  'counterCache' => '' 
  12.  )
  13. );
  14.  var $hasAndBelongsToMany = array('Comms' =>
  15.  array('className' => 'Comments',
  16.  'joinTable' => 'comments',
  17.  'foreignKey' => 'comment_parent',
  18.  'associationForeignKey'=> 'id',
  19.  'conditions' => '',
  20.  'order' => '',
  21.  'limit' => '',
  22.  'uniq'  => true,
  23.  'finderSql' => '',
  24.  'deleteQuery'=> '',
  25.  )
  26. );
  27. }
  28. ?>


Pobiera co prawda newsy, autora i komentarze ale wykonuje przy tym 39 zapytań do bazy, czyli tyle ile jest newsów, jakby bylo ich 100 to pewnie by wykonało ~100 zapytań smile.gif
Liczenia ile komentarzy ma poszczególny news, nie udało mi sie zaimplementować do modelu.

Licze na pomoc... smile.gif
mariuszn3
heh.. wygląda to bardzo topornie..
Też jestem bardzo ciekaw czy faktycznie aż takie ograniczenia wiążą się z wykorzystaniem cake'a?
Może znajdzie się jakaś mądra doświadczona w cake'u głowa, która to rozjaśni..?

Właśnie mam zająć się kodowaniem jednego portalu dla jednej firmy i jako, że nie chcą się uzależniać bardzo ode mnie wolą zastosować jakiś znany OS framework.. zaproponowałem im Cake'a i zaczynam się bać worriedsmiley.gif
nrm
ja wlasnie z tego wzgledu uzywam tylko $this->query(); idzie mi syzbciej i mam pelna kontrole nad tym co robie, a dodatkowo jeszcze mam dopisany cache na pytania sql.

niestety nie pomoge ci z tym pytaniem bo wlasnie po takich samych walkach (wielogodzinnych) stwierdzilem, ze to pier*** smile.gif nie dosc, ze clzowiek sie napisze jak glupi to jeszcze wydajnosc tych rozwiazan jest dyskusyjna winksmiley.jpg
mariuszn3
uff.. dobrze, że jest obejście poprzez query() smile.gif
Normanos rozumiem, że korzystasz z natywnego MySQL'oego cache'a a nie php ? Przynajmniej widziałem tu już post reklamujący cache'owanie w php.. który w efekcie przejmował cache'owania od MySQL i w dodatku był wolniejszy smile.gif
Jeszcze jedno pytanie.. Czy Cake jest wszędzie w miarę elestyczny i można bezproblemowo jakieś swoje moduły wykorzystać?
mr.r
ech counterQuery w ogóle nie jest zaimplementowane do modelu, co by się tam nie dalo nie dziala, nawet błedu nie powoduje sad.gif
nrm
mariuszn3: nie, oczywiscie ze php. najprostsze i juz wytestowane przeze mnie rozwiazanie: serializacja danych do pliku. na dowolna ilosc czasu. w zasadzie identycznie rozwiązanie co Zyxa w OPD (nakładka z cache na PDO).
a elastycnzosc: coz, pewnie zalezy od umiejetnosci i przyzwyczajen. na juz lekko zorientowalem sie w strukturze i na razie sobie radze. cos wiecej powiem jak skoncze wiekszy serwis.
andrzejb
ja napisze tak jezeli powtazalnosc zapytan jest duza TYPU: select pole pole pole WHERE id=$id, to ja nie widze sensu rezygnowania z modelu ktory ulatwia bardzo bardzo prace z zapytaniami jezeli mamy specyficzny przypadek wtedy przychodzi nam z pomocą query.. oczywiscie jako uzupelnienie brakow ale trudu przeniesienia na model stricto relacyjny czyli sumowanie zbiorow dzielenie złączenia wyliczenia itp.. ktore stanowia jak wiadomo znikomy % wykonanych zapytań(w moich projektach oczywiscie)
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.