![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 589 Pomógł: 91 Dołączył: 22.05.2008 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Mam obiekt Person który odzwierciedla 2 tabelki w bazię.
user_name userId | userName | userSurname | email (...) user_memo userId | userMemo dlatego 2 tabelki, bo nie każda osoba musi mieć opis Stworzyć go można tylko za pomocą metody statycznej get( $id ). Mam metodę edit( $parmArr ), który edytuje strukturę w bazię jeśli jest to konieczne, np sprawdza czy osoba ma opis jeśli nie a ja chce go jej dodać tworzy nowy rekord w tabelcę user_memo Ogólnie działanie
i chcę teraz żeby po edycji obiekt został zaktualizowany. Myślałem nad prostym rozwiązaniem:
Fatal error: Cannot re-assign $this Ok, da się to jeszcze przejść po prostu zczytać dane podane w $dataArr i powpisywać je do właściwości, podobnie jak dla bazy robie. Ale co jeśli chce metode delete(), która ma usuwać odpowiadające rekordy w user_name oraz w user_memo oraz usunąć obiekt.
Nie zadziała. Może totalnie źle myślę... (IMG:http://forum.php.pl/style_emoticons/default/dry.gif) Edit Oczywiście mógłbym zwracać obiekt tymi metodami ale zastanawiam się czy da się to zrobić wewnątrz. Ten post edytował #luq 24.05.2009, 15:46:14 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witaj w te piękne niedzielne popołudnie:)
Po pierwsze, to co mi się nasuwa, to czy dana persona może mieć klika opisów? Jeśli nie (jak to jest w przypadku np stopki na forum, opisu gg... etc) to uważam, że zaoszczędzenie miejsca wynikające z przeniesienia opisów do oddzielnej tabeli jest niewielkie, a nawet przy większej ilości osób z opisami żadne. Dodatkowo powoduje niepotrzebne utrudnienia. Proponowałbym przenieść kolumne userMemo do tabeli user_name. W takiej strukturze wszelkie odczyty i modyfikację stają się ciut łatwiejsze. A klasę operującą na tym można by zrobić mniej więcej tak:
Ten post edytował vokiel 24.05.2009, 16:27:17 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 589 Pomógł: 91 Dołączył: 22.05.2008 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Tak, osoba może mieć jeden opis. W sumie masz rację z tym przeniesieniem userMemo do user_name, przy łączeniu tych 2 tabelek idzie to na pewno dłużej niż jakby było w jednej tabelce (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Było by łatwiej. W sumie można by robić to tak jak to pokazałeś, tyle że ja mam statyczną metode get ponieważ są jeszcze metody
Ale mniejsza z tym. Z editem jeszcze dałbym rade zaktualizować obiekt, tylko co z delete? Można by to zrobić tak.
Tylko jeśli przez pomyłkę napiszemy:
To już mamy dupkę (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Obiekt istnieje natomiast w bazie już go nie ma. Dlatego zastanawiam się czy można w jakiś sposób wewnątrz obiektu go usunąć, żeby takie błędy nie mały możliwości wystąpić. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Trochę nie rozumiem struktury klas. Masz tą klasę Person, która pobiera dane, tak? Np ::get, ::getAll, getSite(), czyli pobiera poszczególne pola z tabeli dla danego usr?
Jeśli tak, to bym proponował jedną metodę get($what), potem drugą set($what, $newValue) Te metody, które piszesz (edit, delete) są metodami klasy Person? A może zrobić tak:
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 589 Pomógł: 91 Dołączył: 22.05.2008 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Cytat Np ::get, ::getAll, getSite(), czyli pobiera poszczególne pola z tabeli dla danego usr? Nie, nie, nie. ::get() pobiera wszystkie dane jednego usera i tworzy z tego obiekt ::getAll() pobiera i tworzy obiekty wszystkich userów z bazy ::getSite() pobiera stronę userów przykładowo gdy podamy parametr 2 dostaniemy userów od 21 do 40 (ORDER BY un.userId LIMIT (...)) oczywiście zależne jest to od wartości stałej ile ma być userów na stronie. W tym wypadku stała jest ustawiona na 20. Ogólnie ta klasa reprezentuje jednego konkretnego człowieka, właściwie tylko przechowuje we właściwościach odpowiednie pola z bazy. Ten obiekt będzie wrzucony do innego obiektu, jak zresztą masa innych. Na stronie będzie jedynie używana tylko w takiej formie.
Natomiast w panelu admina, musi być możliwośc przeglądania wszystkich, podzielenia tego na strony, edycji, usuwania i dodawania nowych. I tutaj będzie to wykorzystywane w taki sposób
Tak naprawdę to co aktualnie mam mi wystarcza. Przy usuwaniu kieruje się na adres /admin/deleteuser/3
Wyszysko działa, tyle, że pomyślałem, że fajnie byłoby usuwać te obiekt, któego po delecie tak naprawdę już nie ma. Zostaje mi obiekt który już nie ma odzwieciedlenia w bazie. Myślę, że to było by to bardziej zgodne z OOP, logiką itd. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Jak widać destruktor nie wchodzi w rachubę. Wyświetle usera, parser pojedzie do końca kodu i buum usuwa mi wszystkie obiekty, tym samym wywala mi je z bazy. Nie wiem, taki model widaje mi się rozsądny. Może się myle? Z OOP nie jestem jeszcze tak bardzo obeznany (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Ten post edytował #luq 24.05.2009, 18:42:02 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
No to teraz rozumiem troche bardziej (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Nie widzę tu możliwości usunięcia obiektu poza unset(), poza tym nie ma takiej potrzeby. Żeby zmodyfikować jakiegoś usr musisz wpiewr go pobrać, stworzyć obiekt. Zatem jak zrobisz:
Myślę, że chodziło Ci o automatyzację tego unset, juz w metodzie delete, tak? Chyba pozostaje Ci samo unset, albo przeprojektowanie klas. Tak, że miałbyś klase Usr, i UsrsAdm, do której byś przekazywał obiekt tej pierwszej, na wzór:
Ten post edytował vokiel 24.05.2009, 22:02:14 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 589 Pomógł: 91 Dołączył: 22.05.2008 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Myślę, że chodziło Ci o automatyzację tego unset, juz w metodzie delete, tak? Dokładnie. Dzięki za zainteresowanie. Twoja odpowiedź mnie satysfakcjonuje, nie da się tak jak ja to wymyśliłem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 03:59 |