rahul
21.09.2011, 11:51:25
Witam.
Mam takie 2 tabele
Obrazek tabelektrzecia (dolna tabelke) otrzymuje po wykonaniu zapytania : SELECT a.*, b.name as 'role_name', b.id as 'role_id' FROM gw_admins as a, gw_admin_roles as b WHERE a.id = '$id' AND key_id = '{$_SESSION['gw_admin']}' and a.role = b.id
i teraz moje pytanie. Jak mam sobie kontener na admina gdzie trzymam :
private $id;
private $gw_key_id;
private $username;
private $password;
private $email;
private $role;
private $first_name;
private $last_name;
private $phone;
czy powinienem tez trzymac private $role_id; nie chce robic osobnego obiektu dla samych roli bo mi bedzie nie potrzebny natomiast przy wywolaniu selectAdmin($id) chce znac jego role po nazwie i miec dostep do id tej roli.
Jak to z punktu OOP rozgryzc ? $admin= new Admin(); $admin->getRole()->getId() , jakos tak ?
Ja nie rozbijam w ogóle roli na osobna tabelę. Mam definicje stałych w pliku konfiguracynym config.php dla tych zmiennych np. define('SYSTEM_ROLE_USER', 'user'). Tych stałych używam w kodach, mam wtedy zachowaną czytelność, gdybym w kodzie uzywał numerków to musiałbym zaglądać do bazy aby przypomnieć sobie co, która cyferka oznacza - a głowa nie śmietnik. W tabeli SystemUser mam pole 'role' a w nim już konkretne nazwy 'admin', 'user'. Tabela SystemUser jest na tyle zgrabna, że nie widziałem potrzeby jej rozbijania ze wzgl. na pole 'role'. Obok pola 'role' ma również 'username', 'password', 'registerDate'.
Jeśli chcesz trzymać dane np. adresowe odn. użytkownika wtedy możesz obok tabeli SystemUser stworzyć tabelę PersonEntity, która będzie ogólną tabelą informującą o innych danych użytkownika. Można ją potem wykorzystywać w dowolnym projekcie, który nie wymaga akurat czegoś takiego jak konto użytkownika.
rahul
27.09.2011, 08:33:13
SOrry, ale nie do konca rozumiem takie podejscie. A co np. w momencie jakby mozna byloby dynamicznie dodawac nowe role. Tabela wydaje mi sie musi istniec, bardziej zastanawia mnie jak wtedy wygladac powinien obiekt. Narazie trzymam w nim i id roli i nazwe roli choc wydaje mi sie ze jest to troche zle, choc praktycznie.. sprawdza sie

.
Kedan
27.09.2011, 08:33:21
Cytat
$admin= new Admin(); $admin->getRole()->getId()
Bardzo dobry pomysł.
Jeśli potrzebujesz $role_id i $role_name w klasie usera to nie widzę przeszkód by takie pola utworzyć - choć osobiście zrobiłbym osobną klasę.
Na marginesie zastanawiam się czy nie lepiej byłoby utworzyć, prócz tabel 'users' i 'roles' trzecią tabelę relacji 'users_roles' [user)id, role_id], a generują zapytanie sql korzysstać z JOIN - w ten sposób możesz przypisać użytkownikowi wiele ról. No chyba że niepotrzebne Ci są relacje wiele-do-wielu
rahul
27.09.2011, 13:27:52
Hej elo.
Drazac temat. Pytanie jak powyzej. Czy moge miec obiekt w obiekcie jezeli tak to czy jest ktos w stanie mi troszeczke to jakby lopatologicznie wyjasnic. Sytacja ma sie glownie w zapytaniach jak lacze rozne tabele i wyciagam info zwiazane nie tylko z jednym obiektem lecz z 2 a w przyszlosci pewnie i z wieksza iloscia.
Mam np. obiekt komentarz, yo.
[PHP] pobierz, plaintext
while($row = mysql_fetch_assoc($sql))
{
$comment = new comment();
$comment->setId($row['id']);
$comment->setGwKeyId($row['gw_key_id']);
$comment->setAuthorId($row['author_id']); // tutaj mam id autora, samo id mnie nie interesuje, chce znac imie i nazwisko. Aby nie zadawac 2 zapytan do bd, zadaje jedno duuuuze i wyciagam info, yo.
$comment->setTarget($row['target']);
$comment->setTargetId($row['target_id']);
$this->comment[] = $comment;
}
tak wiec robie LeftJoina. Np =
[PHP] pobierz, plaintext
$sql = mysql_query("select c.*, a.id as 'admin_id' , a.firstName as 'admin_firstName' , a.lastName as 'admin_lastName' , a.login as 'admin_login'
FROM gw_comments as c LEFT JOIN gw_admins as a ON c.author_id = a.id
WHERE target='$target'
AND gw_key_id = '{$_SESSION['gw_admin']}'
AND target_id = '$id'");
NO dobra i czy teraz obiekt admin sobie siedzi w obiekcie comentarz pod private $author_id czy mam stworzy 2 obiekt. Jak to ugryzc. Help
CuteOne
27.09.2011, 19:30:52
$commentObj = new Comments();
$commentObj -> addItem($row, new UserObject($row['author_id']));
echo $commentObj->user->getRole(); echo $commentObj->getCommentName()->getCommentId(); }
Comments to "kolekcja" do której pakujesz kolejne komentarze wraz z obiektem UserObject, który "zarządza" danymi autora komentarza. Nie opiszę ci tego dokładnie bo jest to kilka ładnych klas ale spokojnie nie zostawię cię z niczym

w książce bodajże PHP Zaawansowane programowanie(lub coś z Heliona nie pamiętam dokładnie) masz fajny przykład wykorzystania poprawnie skonstruowanej kolekcji do tego typu działań [to co tu napisałem to tylko taki hmmm skrót myślowy

]
rahul
28.09.2011, 08:29:27
czyli w obiekt komments pod zmienna np. private $author pakuje obiekt User, dobrze to rozumiem ?
mike
28.09.2011, 10:30:41
Tak. Dobrze to rozumiesz.
rahul
28.09.2011, 15:19:02
fuck yeah
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.