Yii Framework Forum: Klauzula Having A Cdbcriteria - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Klauzula Having A Cdbcriteria Rate Topic: -----

#1 User is offline   JoShiMa 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 12-July 13

Posted 17 September 2013 - 06:08 AM

Potrzebuję zrobić filtrowanie danych na stronie i w tym celu uzywam formularza. Dane z formularza służą mi następnie do zbudowania kryteriów dla ActiveRecord. Używam w tym celu CDbCriteria. Tylko że jego metody tworzą warunki w klauzuli WHERE.Tymczasem bywa że potrzebuję dodać coś do klauzuli HAVING. Jak to ugryźć?

Wiem, ze można poprostu przypisac do właściwiści having, ale wolałabym coś inteligentniejszego, bo warunki mogą być zawiłe.
0

#2 User is offline   mirunho 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 170
  • Joined: 19-December 12
  • Location:Gdansk, Poland

Posted 17 September 2013 - 06:51 AM

Mogłbyś wyjaśnić dlaczego metody CDbCriteria tworzą warunki WHERE ? Bo tego zdania po kilka przeczytaniach nadal nie rozumiem.

Opis klasy możesz znależć pod
http://www.yiiframew...1.1/CDbCriteria
Nie wiem czy to jest inteligentniejsze :D
0

#3 User is offline   nineinchnick 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 622
  • Joined: 12-September 11
  • Location:Bialystok, Poland

Posted 17 September 2013 - 09:13 AM

Jeśli używasz HAVING to znaczy, że robisz jakieś grupowanie. A jeśli robisz jakieś grupowanie to znaczy, że i tak masz dość niestandardowe użycie ActiveRecord. Myślę, że nie ma tutaj żadnych pomocniczych metod, które możesz użyć.
Don't be a dick.
0

#4 User is offline   JoShiMa 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 12-July 13

Posted 17 September 2013 - 06:34 PM

nineinchnick Czemu uważasz, że niestandardowe?

mirunho nie wiem dlaczego, ale tak jest. Wykorzystując addCondition() itp zawsze dostaje się warunki w klauzuli WHERE. No chyba, że coś źle robię.
0

#5 User is offline   nineinchnick 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 622
  • Joined: 12-September 11
  • Location:Bialystok, Poland

Posted 18 September 2013 - 11:14 AM

To znaczy, że robi się to rzadko. Przynajmniej w moich projektach tak jest.
Don't be a dick.
0

#6 User is offline   aztech 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 206
  • Joined: 12-December 08
  • Location:Poland

Posted 19 September 2013 - 02:31 AM

Z tego co piszesz dużo bardziej przyda Ci się query builder
I'm not complete idiot... some parts are missing!
0

#7 User is offline   JoShiMa 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 12-July 13

Posted 24 September 2013 - 04:42 AM

Rozważałam użycie QB, ale nie za bardzo mi to odpowiada ActiveRecord bardzo ładnie obsługuje relacje i wystarczy sobie dobrze je w klasach podefiniować i zapytania się same konstruują. A tu bym musiała za każdym razem wszystkie joiny klepać z palca. To już to samo jak bym całe zapytanie napisała.

No nic zrobiłam jakąś protezę i działa. Szkoda, że nie ma takich zgrabnych metod jak dla klauzuli WHERE. Może w kolejnych wersjach?
0

#8 User is offline   nineinchnick 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 622
  • Joined: 12-September 11
  • Location:Bialystok, Poland

Posted 24 September 2013 - 09:02 AM

Proponuję zgłosić to na Githubie, najlepiej z jakimś przykładem z życia wziętym.
Don't be a dick.
0

#9 User is offline   JoShiMa 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 12-July 13

Posted 25 September 2013 - 04:40 AM

Przykład z życia wzięty? Choćby zliczanie postów userów i wyciąganie najaktywniejszych. Masz AR ze zdefiniowanymi relacjami, robisz zapytanie gdzie z tabeli postów musisz wyciągnąć count i grupować po id usera. Chcąc wyciągnąć userów o ilości postów większej niż np 10 musisz dać warunek w klauzuli HAVING a nie WHERE. Tak działają wszystkie COUNTy MAXy MINy AVR itp funkcje aregujące, które wymagają grupowania.
To naprawde nie sa jakieś wyszukane zapytania i relacje.
0

#10 User is offline   nineinchnick 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 622
  • Joined: 12-September 11
  • Location:Bialystok, Poland

Posted 25 September 2013 - 02:01 PM

Po pierwsze, wspomniałem o tym, aby ten przykład zamieścić razem ze zgłoszeniem na Githubie. Po drugie, chodziło mi o przykład uzasadniający dodawanie wielu pomocniczych metod, bo podanie jednego warunku 'count(t.id)>10' nie wymaga specjalnych narzędzi. W praktyce w HAVING jest dość mało warunków i nie są zagnieżdżone.

Nie twierdzę, że nie jest to potrzebne. Wiem tylko, że trzeba to uzasadnić aby zostało dodane do frameworka. A najlepiej napisać samemu i zrobić pull-request. Inaczej, jeśli reszta ludzi uznaje to za mało istotne, nikt sam z siebie tego nie zrobi.
Don't be a dick.
0

#11 User is offline   afnwork 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 09-May 12

Posted 28 October 2013 - 08:02 AM

View PostJoShiMa, on 25 September 2013 - 04:40 AM, said:

Przykład z życia wzięty? Choćby zliczanie postów userów i wyciąganie najaktywniejszych. Masz AR ze zdefiniowanymi relacjami, robisz zapytanie gdzie z tabeli postów musisz wyciągnąć count i grupować po id usera. Chcąc wyciągnąć userów o ilości postów większej niż np 10 musisz dać warunek w klauzuli HAVING a nie WHERE. Tak działają wszystkie COUNTy MAXy MINy AVR itp funkcje aregujące, które wymagają grupowania.
To naprawde nie sa jakieś wyszukane zapytania i relacje.

http://www.yiiframew...atistical-query
Wydaje mi się, że tutaj jest to czego potrzebujesz ;)
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users