Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Kohana]Liczenie rekordów ORM
grzes999
post
Post #1





Grupa: Zarejestrowani
Postów: 305
Pomógł: 29
Dołączył: 5.07.2011

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


Dziś zacząłem używać modułu ORM. I już ma pierwszy problem.
Otóż ma 3 tabele utworzone ze schematu Auth ORM niezbędnych do logowania. Czyli mam tabelę User | Role | UserRole
I teraz chce policzyć ilu użytkowników ma rolę powiedzmy admin.
Teraz robię to tak w kontrolerze

  1. $users = ORM::factory('user')->where('activated', '=', 1)->find_all();
  2. $customer = 0;
  3. foreach($users->as_array() as $user)
  4. {
  5. $klient = ORM::factory('user',$user)->has('roles',3);
  6. if($klient) ++$customer;
  7. }
  8. echo $customer;


Żeby nie było to działa tylko czy może jest jakiś szybszy sposób aby uzyskać pożądany efekt.
Przejrzałem dokumentacje Kohany do ORMa; ale nie znalazłem odpowiedzi na swoje pytanie :/
Go to the top of the page
+Quote Post
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Nie używam ORM w kohanie ale
  1. ORM::factory('user')->where('activated', '=', 1)
  2. ->where('role', '=', 'admin')

Bo w tabeli user powinieneś mieć info do jakiej grupy przynależy użytkownik


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
magnus
post
Post #3





Grupa: Zarejestrowani
Postów: 99
Pomógł: 15
Dołączył: 15.11.2007
Skąd: Nowogród Bobrz.

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


Nie wiem czy bez joina da się to zrobić, ale join i tak musi być w bazie zrobiony, więc najłatwiej będzie tak:

  1. ORM::factory('User')
  2. ->join('roles_users', 'left')
  3. ->on('roles_users.user_id', '=', 'user.id')
  4. ->where('roles_users.role_id', '=', '2')
  5. ->count_all();


Jak po nazwie roli, to jeszcze trzeba join'ąć tabelę 'roles'.

Można też tak:
  1. $role = ORM::factory('Role')->where('name', '=', 'admin')->find();
  2. echo $role->users->count_all();


--------------------
Efemental.pl - nasz punkt słyszenia :: recenzje :: tylko metal!
Opensource'owy klon Cantra: http://github.com/magnax/Simtr
Go to the top of the page
+Quote Post
grzes999
post
Post #4





Grupa: Zarejestrowani
Postów: 305
Pomógł: 29
Dołączył: 5.07.2011

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


Dzięki wielkie za pomoc. Mam jeszcze jedno pytanie techniczne. Wszystkie pobrania z bazy wykonuję teraz w kontrolerze??
Czy tworzyć metody w odpowiednim modelu i tylko wywoływać jej w kontrolerze. Tak jak to robiłem dotychczas bez wykorzystania ORM.
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




#2. Wiem, że korzystając z ORM czasem aż kusi by poskładać zapytanie w kontrolerze, ale lepiej trzymać się tego, że tego typu rzeczy robi się w modelu.
Go to the top of the page
+Quote Post
grzes999
post
Post #6





Grupa: Zarejestrowani
Postów: 305
Pomógł: 29
Dołączył: 5.07.2011

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


Ok będę robił w modelu. Jeszcze tylko ostatnie pytanie. czy ORM jest wydajniejszy o zapytań budowanych w query bulder?? Bo osobiście nie jest przekonany do tego ORMa. Pewnie kwestia przestawienia się na niego. Tylko pytanie czy warto?
Go to the top of the page
+Quote Post
phpion
post
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Nie, ORM na pewno nie będzie wydajniejszy. Aplikacja napisana z użyciem ORM będzie zużywała więcej pamięci (sporo więcej), a dane pobieranie przez ORM zazwyczaj będą nadmiarowe (wszystkie kolumny z tabeli). Zaletą ORM jest to, że otrzymujesz obiekty, możesz wywoływać na nich metody, korzystać z relacji itd. Wspomniana nadmiarowość danych ma też swój plus: wiedząc, że w danym miejscu masz obiekt ORM wiesz, że masz dostęp do jego wszystkich danych, więc wprowadzanie jakichkolwiek zmian w aplikacji jest tak naprawdę dużo prostsze. Coś za coś...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 03:07