1

Temat: Model potrzebuje danych z innego modelu

Sprawa wygląda następująco:
Model odpowiedzialny za liczniki (z maszyn produkcyjnych) podczas dodawania nowego licznika przez użytkownika dokonuje walidacji wprowadzonej wartości. Tzn poza sprawdzaniem właściwego formatu itp. sprawdza również samą wartość wprowadzanego licznika. Chodzi o to by użytkownik wpisując licznik nie przekroczył zakresu licznika z maszyny. Dane o maksymalnych wartościach liczników zapisane są w modelu odpowiadającym za maszyny. Mam problem z pobraniem danych z modelu maszyny do modelu liczników w celu wykonania walidacji.
Piszę bo szukam ELEGANCKIEGO rozwiązania zgodnego z wzorcem MVC.

1. rozwiązanie jakie mi się nasuwa do dodanie do $this->data w kontrolerze liczników wartości do jakiegoś nowego klucza np maxCounter jeszcze w kontrolerze. Wtedy wszystko czego potrzebuję było by w modelu w zmiennej $this->data. To było by chyba najmniej eleganckie.

2. rozwiązanie to pobranie tej maksymalnej wartości z kontrolera maszyn przez wywołanie requestAction z modelu licznika(nie wiem czy jest to możliwe z modelu). Wydaje się troszeczkę bardziej zgodne ze wzorcem MVC

3. które mi nie wychodzi to załatwienie wszystkiego między modelami, tzn bez angażowania w to kontrolerów i pisania dodatkowej funkcji (jak w pkt. 2) Przydatne było by pobranie tej wartości przez wywołanie bezpośrednio z modelu licznika.

Proszę o jakieś rady w tym temacie.

New Now Know How

2

Odp: Model potrzebuje danych z innego modelu

Nie wydaje mi się, żebym do końca zrozumiał problem, z którym się borykasz, jednak wydaje mi się, że najlepiej zrobić to tak jak w punkcie 3, czyli
dodać do uses model z maszynami i pobrać dane dla konkretnego modelu (albo poprzez App::import + ClassRegistry::init - zalecane) i
a/ zrobić find'a dla załadowanego modelu i wygrzebać interesującą Cię daną
b/ (zalecane) dodać w modelu metodę getMaxCounter($id_typu_maszyny) i wywołać tą metodę

Czy to ma sens, czy jednak nie zrozumiałem Twojego problemu w ogóle?

3

Odp: Model potrzebuje danych z innego modelu

Zrobiłem tak jak w radziłeś w pkt. b

id02009 napisał/a:

b/ (zalecane) dodać w modelu metodę getMaxCounter($id_typu_maszyny) i wywołać tą metodę

Szczególnie że napisałem sobie tą metodę wcześniej. Okazało się, że źle przekazywałem w modelu liczników ID maszyny której maksymalny licznik jest mi potrzebny. Dlatego wcześniej mi to nie działało... Teraz myślę że jest idealnie i wszystko wg. wzorca MVC. Za walidację odpowiadają tylko modele, kontroler natomiast tylko zapisuje dane i sprawdza czy walidacja się powiodła.

Od jakiegoś czasu zwracam uwagę na to by pisać kod jak biały programista w biały dzień, a nie byle by działało i stąd te wątpliwości big_smile

New Now Know How

4

Odp: Model potrzebuje danych z innego modelu

Od jakiegoś czasu zwracam uwagę na to by pisać kod jak biały programista w biały dzień, a nie byle by działało i stąd te wątpliwości big_smile

Gratuluję. Mało jest takich, którym się tak chce. A trzymanie się MVC i dobre projektowanie obiektowe zwrócą się po wielokroć, więc się nie poddawaj cool