konto usunięte

Temat: Jak to rozwiąć - jeden użytkownik, wiele grup, aktywne...

Witam

mam do rozwiazania taki problem i nie bardzo wiem jak..

otóż:
Może nie potrzebuję mieć HABTM ale właśnie dlatego chcę spytać.
Użytkownik może być członkiem wielu grup, stąd chciałem mieć tabelę Membership która zawierałaby user_id, group_id, active(0-nieaktywne,1-aktywne,-1 -ban),describe(miejsce np. na notkę od admina, coś w stylu co aktualnie z twoim członkostwem,ale to tylko detal)

Potem w aplikacji będę potrzebował wyświetlać user'owi wiele różnych rzeczy powiązanych z grupą, której członkostwo w danym momencie jest aktywne dla user'a. Jak to rozwiązać, żeby uniknąć pisania w aplikacji co chwilę user->membership->group .. itd.

Myślałem by użytkownik miał kolumnę z active_membership lub coś w tym stylu i na tej podstawie system mu podawał informacje ale nie wiem jak to dobrze rozwiązać i główkuje nad tym od paru dni i nic mądrego nie wymyśliłem, a zapewne ktoś z kolegów tutaj nie raz się z takim czymś spotkał i robił to może podzieli się doświadczeniem ?
Tomasz Wójcik

Tomasz Wójcik inżynier informatyk,
specjalizacja: sieci
komputerowe

Temat: Jak to rozwiąć - jeden użytkownik, wiele grup, aktywne...

User moze nalezec do wielu grup (User belongsTo Group)
Grupa moze miec wielu Userow (Group hasMany user)

a takie polaczenie to czysty HABTM, ktorego definiujesz przez
$hasAndBelongsToMany = array(
'Group' => array(
...,
'with' => 'Membership' // model stoi miedzy User a Group
)
)


Model Membership moze miec swoje pola i mozesz na nim normalnie dzialac, dokladnie taki przyklad jest nawet w CakeBooku w sekcji o relacjach modeli (w relacji HABTM) - poczytaj

konto usunięte

Temat: Jak to rozwiąć - jeden użytkownik, wiele grup, aktywne...

Tomasz Wójcik:
User moze nalezec do wielu grup (User belongsTo Group)
Grupa moze miec wielu Userow (Group hasMany user)

a takie polaczenie to czysty HABTM, ktorego definiujesz przez
$hasAndBelongsToMany = array(
'Group' => array(
...,
'with' => 'Membership' // model stoi miedzy User a Group
)
)


Model Membership moze miec swoje pola i mozesz na nim normalnie dzialac, dokladnie taki przyklad jest nawet w CakeBooku w sekcji o relacjach modeli (w relacji HABTM) - poczytaj

tam gdzie wszedłem to było tylko wspomniane ale zero komentarza i wyjaśnienia..
Tomasz Wójcik

Tomasz Wójcik inżynier informatyk,
specjalizacja: sieci
komputerowe

Temat: Jak to rozwiąć - jeden użytkownik, wiele grup, aktywne...

User
- id (int, pk)
- active_group_id (int, fk)
- ...

Group
- id (int, pk)
- ...

Membership
- id (int, pk)
- user_id (int, fk)
- group_id (int, fk)
- description (text)
- ...
- unique (user_id, group_id)

AppModel actsAs Containable
User HABTM Group (with Membership)

dodatkowo:
User
var $belongsTo = array(
'ActiveGroup' => array(
'className' => 'Group',
'foreignKey' => 'active_group_id
)
);

i potem masz normalne szukanie

$user = $this->User->find('all', array(
'conditions' => array(
//'User.active' => 1,
),
'contain' => array(
'ActiveGroup',
'Group',
),
));

$user['ActiveGroup'] // aktywna grupa
$user['Group'] // tablica wszystkich grup

w ten sposob chcesz?

edit:
cala stukturke $user wpisz sobie do sesji albo do autha w sesji, chociaz wtedy pozostaje kwestia synchronizacji z baza gdy ktos inny zmieni Ci grupe a Ty bedziesz ciagnal dalej z sesji grupe (ktora juz moze nie byc tak naprawde aktywna/aktualna)Tomasz Wójcik edytował(a) ten post dnia 20.07.10 o godzinie 13:31



Wyślij zaproszenie do