Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Doctrine - relacja
Forum PHP.pl > Forum > Gotowe rozwiązania > Skrypty obsługi baz danych
Apo
Witam

Cały czas nie moge sie połapać w tym Doctrine. Mam 3 tabele w bazie danych:
- Users (id, name, password)
- Groups(id, name) nazwy grup
- UserGroups(id, uid, gid) grupy przydzielone użytkownikom

No wiec napisałem w Doctrine:

  1. <?php
  2. class Users extends Doctrine_Record {
  3.  
  4. public function setUp()
  5. {
  6. $this->hasMany('Groups', 'UserGroups.gid');
  7. }
  8.  
  9. public function setTableDefinition()
  10. {
  11. $this->hasColumn('name', 'string', 20, 'notnull|unique');
  12. $this->hasColumn('password', 'string', 40, 'notnull');
  13. }
  14.  
  15. }
  16.  
  17. class Groups extends Doctrine_Record {
  18.  
  19. public function setUp()
  20. {
  21. $this->hasMany('Users', 'UserGroups.uid');
  22. }
  23.  
  24. public function setTableDefinition()
  25. {
  26. $this->hasColumn('name', 'string', 30, 'notnull|unique');
  27. }
  28.  
  29. }
  30.  
  31. class UserGroups extends Doctrine_Record {
  32.  
  33. public function setTableDefinition()
  34. {
  35. $this->hasColumn('uid', 'integer', 10, 'notnull');
  36. $this->hasColumn('gid', 'integer', 10, 'notnull');
  37. }
  38.  
  39. } ?>


Aby dodać użytkownika robie tak:

  1. <?php
  2. $user = new Users;
  3. $user->name = 'Apo';
  4. $user->Groups[0]->name = 'admin'; //
  5. $user->save();
  6. ?>


Po takim czymś dodaje mi sie użytkownik o nazwie Apo, dodaje sie grupa admin i automatycznie przypisuje sie ta grupa do usera w tabeli UserGroups. No i w tym problem żeby ta grupa za każdym razem sie nowa nie tworzyła tylko dała domyślną grupe admin (bez jej tworzenia). I chcialem sie zapytać jak powinno to optymalnie i poprawnie wyglądać. Zrobiłem coś takiego:

  1. <?php
  2. $user = new Users;
  3. $user->name = 'admin';
  4. $user->save();
  5.  
  6. $group = new UserGroups;
  7. $group->uid = 5; // tu trzeba dać id aktualnie tworzonego usera ale how to make this ?
  8. $group->gid = 1; // czyli admin
  9. $g->save();
  10. ?>


Pozdrawiam
SebaZ
Cytat(Apo @ 1.11.2006, 22:16:04 ) *
Cały czas nie moge sie połapać w tym Doctrine. Mam 3 tabele w bazie danych:
- Users (id, name, password)
- Groups(id, name) nazwy grup
- UserGroups(id, uid, gid) grupy przydzielone użytkownikom

ja mam tylko jedno skromne pytanko: a po co robisz 3 tabele? czy to nie marnotrawstwo zasobów? wystarczy do tabeli Users dorzucic jedno dodatkowe pole, np. group i tam wstawiać id grupy do której ma userek należeć. To jest relacyjność
dr_bonzo
A co zrobisz gdy user moze nalezec do wielu grup?
Cytat
UserGroups(id, uid, gid) *grupy* przydzielone użytkownikom


grupy -- liczba mnoga
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-2024 Invision Power Services, Inc.