Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak stworzyc obiekt adekwatny do laczonej bazy danych.
rahul
post
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 5.03.2011

Ostrzeżenie: (0%)
-----


Witam.
Mam takie 2 tabele

Obrazek tabelek

trzecia (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 ?
Go to the top of the page
+Quote Post
LSM
post
Post #2





Grupa: Zarejestrowani
Postów: 64
Pomógł: 6
Dołączył: 20.03.2011
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


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.


--------------------
"I see" - said the blind man.
Go to the top of the page
+Quote Post
rahul
post
Post #3





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 5.03.2011

Ostrzeżenie: (0%)
-----


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 smile.gif.
Go to the top of the page
+Quote Post
Kedan
post
Post #4





Grupa: Zarejestrowani
Postów: 53
Pomógł: 1
Dołączył: 20.07.2007

Ostrzeżenie: (0%)
-----


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 smile.gif
Go to the top of the page
+Quote Post
rahul
post
Post #5





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 5.03.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
CuteOne
post
Post #6





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


  1.  
  2. $commentObj = new Comments();
  3.  
  4. while($row = mysql_fetch_assoc($sql)) {
  5.  
  6. $commentObj -> addItem($row, new UserObject($row['author_id']));
  7.  
  8. echo $commentObj->user->getRole();
  9. echo $commentObj->getCommentName()->getCommentId();
  10. }


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 wink.gif 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 wink.gif]

Ten post edytował CuteOne 27.09.2011, 21:47:55
Go to the top of the page
+Quote Post
rahul
post
Post #7





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 5.03.2011

Ostrzeżenie: (0%)
-----


czyli w obiekt komments pod zmienna np. private $author pakuje obiekt User, dobrze to rozumiem ?
Go to the top of the page
+Quote Post
mike
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Tak. Dobrze to rozumiesz.
Go to the top of the page
+Quote Post
rahul
post
Post #9





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 5.03.2011

Ostrzeżenie: (0%)
-----


fuck yeah wink.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 05:03