Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MVC 1 model = 1 tabela vs 1 model - zbiór tabel
Forum PHP.pl > Forum > PHP
charzak
Hej, mam projekt liczący 35 tabel, dojdzie jeszcze ok 25. Projekt robie wg wzorca mvc i w połowie pracy zacząłem się zastanawiać nad organizacją modeli, czy z waszego doświadczenia powinno się zrobić do każdej tabeli 1 model czy lepiej 1 model do pewnego zbioru, np 5 tabel, które razem tworzą komplet danych?
Crozin
Opisz dokładniej co masz na myśli pisząc "zrobić 1 model" oraz czym są te tabele (baza danych?). Rzuć może jakiś kodem.
charzak
mysql, weźmy pod lupę galerię:

tabele:
-ads
-ads_has_gallery
-gallery
-gallery_images

opis
dodając ogłoszenie (ads) dodajemy galerię (gallery), gdy galeria jest dodana dodajemy obrazki galerii (gallery_images), gdy gallery i gallery_images są pomyślnie dodane, dodajemy je do ogłoszenia ads_has_gallery

model ads
-insert ads
-insert adsHasGallery

model gallery
-insert
-delete

model galleryImages
-insert
-delete
-getByAdId($adId) - pobiera obrazki galerii wg id ogłoszenia


czy np lepiej:

model ads
-insert ads

model gallery
-insert gallery
-insert galleryImages
-insert adsHasGallery
-delete gallery
-delete galleryImages
-getByAdId

może i zbędne pytanie ale chciałbym to zrobić dobrze
Pyton_000
Tutaj trochę pomyliłeś pojęcia smile.gif

Model - odzwierciedlenie tabeli czyli 1 Model == 1 Tabela
Repozytorium - Obiekt zarządzający danymi pochodzącymi z modelu. Czyli to co Ty podałeś jako "Grupę modeli" to może być właśnie repozytorium.
charzak
fakt pomieszałem pojęcia, czyli lepiej 1 obiekt zarządzający danymi z modeli czy kilka mniejszych? czy to już bez znaczenia?

a może tak:

$gallery = new Gallery();
$gallery->setImages (new Images());
$gallery->insert();
$gallery->images->insert()

$ads = new Ads()
$ads->setGallery (new Gallery())
$ads->gallery->getById();
Pyton_000
Nie, Model to model. Czyli Wrapper na źródło danych. Gallery równie dobrze może być Tabelą w BD, plikiem, CSV, obiektem cache w Redis itd.

Repozytorium jest tym co chcesz. To Tam robisz operacje na źródłach danych.
markonix
Robiłem kiedyś właśnie tak, że modelem było kilka tabel i metod ich dotyczących np. orders + order_item.
Teraz tego bardzo żałuje się i z tego spowiadam gdy robię $this->order_model->get() i "nie wiem" czy dostanę zamówienie czy konkretny item z zamówienia pod ID.
Oczywiście ja wiem, a kod jest udokumentowany ale mimo to zaburza to klarowność kodu.
charzak
dzięki za pomoc
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.