Temat: bindModel z tym samym modelem

Czesc, nie mam przy sobie kodu ale jak bedzie potrzebny to poszukam.

Problem:
tabela projekt(id,user_id,created_by)
tabela users (id,name).

projekt posiada relacje belongs to users dla klucza users_id. Posiada on jednak tez kolumnę created_by ktora nie jest indeksowana i byla zrobiona na zasadzie 'a moze sie przyda'. No i okazalo sie ze sie przydaje.

Podczas wyciagania zapytania o projekty wyskakuje mi tez tabela Users dla klucza user_id. Potrzebuje tez jednak zrobić drugi raz users ale dla wartosci created_by.

Dolaczylem wiec na szybko model (przykladowy):

$this->Projekt->bindModel(array('belongsTo' =>Array('User'=> array (............, foreign_key => created_by))))

i....... nic hmm

Pytanie:
Czy takie cos jest mozliwe, a jak tak to czy zalozenie jest dobre a tylko zle wykonanie czy tez trzeba to robic zupelnie inaczej.

2

Odp: bindModel z tym samym modelem

Wygląda na hasAndBelongsToMany. Póżniej sprawdzasz tylko czy user_id == created_by i wiesz czy uzytkownik stworzył projekt.

3

Odp: bindModel z tym samym modelem

po 1 . foreignKey a nie foreign_key
po 2 relacja poprawna , tylko klucz User zastap czym innymi np User2 i powinno działać.

$this->Projekt->bindModel(array('belongsTo' => array('User2'=> array ("className" => "User", "foreignKey" => "created_by"))));

@analfabeta, jakim sposobem wygla to na hasAndBelongsToMany ?? Mozesz wyasnic ?

Ostatnio edytowany przez robal77 (2009-04-02 10:02:01)

4

Odp: bindModel z tym samym modelem

Ze literowki to wiem :] Wale na szybko i sie nie zastanawiam smile

Co do User2 -> to chyba jednak jest logiczne (jak na jezyk SQL, niewiem czemu nie wpadlem na taka oczywista oczywistosc smile ) -> powinno zadzialac wielkie dzieki big_smile

5

Odp: bindModel z tym samym modelem

@robal77
Uppps.
Troszkę zbłądziłem myślami i wymyśliłem, że wielu użytkowników może pracować nad wieloma projektami a projekt może mieć jednego twórcę.
Pomyślałem, że jak będzie HABTM to wszystkich User połączonych z Project będziemy mieć w wyniku find'a w $wynik['UsersProject']. I wten sposób odpowiedziałem na pytanie, którego nikt nie zadał. Sorki.

6

Odp: bindModel z tym samym modelem

A tak apropos HABTM i mojego przykladu.
Uwazacie ze lepiej trzymac wszystkich userow (admin i zwykly uzytkownik) w jednej tabeli i kontrolowac przez ACL czy moze w jednej tabeli dac zarzadcow(admini, redaktorzy i wszyscy co pracuja nad czyms) a w drugiej samych odbiorcow(klienci i uzytkownicy strony)

Z tym drugim rozwiazaniem spotkalem sie juz kilka razy i ma to swoje wady i zalety.

7

Odp: bindModel z tym samym modelem

w osobnych tabelach.

8

Odp: bindModel z tym samym modelem

Tylko dla przejrzystosci bazy i pewnosci ze 'klient' to 'klient' czy masz jakies wazne powody?

W tym przypadku jezeli 'zarzadcow' jest niewiele nie widze wogole potrzeby zabawy w kontrole dostepu. Kazdy ma jakas kategorie i dalej jedziemy ze zwyklymi warunkami ;]

9

Odp: bindModel z tym samym modelem

Chodzi o bezpiecznestwo i elegance takiego zastosowania ...

Przyklad :

trzymasz uzytytkownikow w tablie ARO, zeby nie nadawac kazdemu uprawnien z osbna, tworzysz dla nich parent'a "User" - nadajesz mu odpowiednie uprawnienia do odpowiednich ACO, wtedy kazdy element potomny dziedziczy uprawnienia z USER ( tak po krotce)

Zeby uproscic sprawe dodajesz kazdego uzytkownika z tabeli users do ARO , pod element nadrzedny User ...

Albo mozesz dla kazdego z adminow nadawac uprawnienia z osobna, bez dziedziczenia, albo musisz sie bawic w if... else ... if ... else ...... niezbyt eleganckie

Latwo sie pomylic i nadac wszytskim uzytkownika uprawnienia admina ...

Admini niekoniecznie musza miec te same pola co uzytkownicy , i bedziesz musial zostawiac null'e  niezbyt eleganckie

Nigdy nie masz pewnosci cz jakis uzytkownik nie wymusi przyznania sobie uprawnien admina....

i milion innych rownie dobrych powodow.

duke_piotr napisał/a:

W tym przypadku jezeli 'zarzadcow' jest niewiele nie widze wogole potrzeby zabawy w kontrole dostepu. Kazdy ma jakas kategorie i dalej jedziemy ze zwyklymi warunkami ;]

Tak wlasnie powstaja w php aplikacje potwory w 90% skladjace sie z niezlwykle przemyslanego kodu np if .. else if ... elseif ...  . albo if($true == "true" ) $true = true  ;-)

Ostatnio edytowany przez robal77 (2009-04-02 13:11:31)

10

Odp: bindModel z tym samym modelem

Ja bym podzielił dodatkowo użytkowników na grupy jeśli by było więcej rodzajów użytkowników niż uprzywilejowany i nieuprzywilejowany.
Tak jak tu

Ostatnio edytowany przez alfabeta (2009-04-02 14:06:01)