Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Kohana]Liczenie rekordów ORM
Forum PHP.pl > Forum > PHP > Frameworki
grzes999
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 :/
skowron-line
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
magnus
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();
grzes999
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.
phpion
#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.
grzes999
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?
phpion
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ś...
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.