![]() |
![]() ![]() |
![]() |
![]()
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ę... ![]() 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 -------------------- Moja gra - scraby.io
|
|
|
![]()
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
![]()
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ę ![]() -------------------- Moja gra - scraby.io
|
|
|
![]()
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. ![]() 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 ![]() Ten post edytował #luq 24.05.2009, 18:42:02 -------------------- Moja gra - scraby.io
|
|
|
![]()
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
![]() 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 ![]() -------------------- Moja gra - scraby.io
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 06:33 |