Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CakePHP] Wirtualna relacja HABTM, coś jak fixtura
Forum PHP.pl > Forum > PHP > Frameworki
23kulpamens
Witajcie,

mam dość skomplikowany problem w CakePHP, może ktoś mi pomoże wpaść na właściwe rozwiązanie. Piszę aplikację w której mam model Foo z tabelą foos . I chciałbym żeby Foo miało parametr / pole (odnoszące się poprzez relację HABTM) do modelu Bar. Przy czym wolałbym nie tworzyć osobne tabeli bars dla tego modelu. Ponieważ tabela bars będzie bardzo mała, z pięć pozycji. Nawet w czasie nie urośnie za wiele, dwa do pięciu wpisów na przestrzeni pięciu lat, a może w ogóle. Więc nie chciałbym tworzyć tabeli i sprawiać że CakePHP będzie generował kolejne zapytania SELECT. Czy ktoś ma pojęcie jak to można uzyskać?

Jednym z rozwiązań o którym myślałem jest utworzenie fixtury dla tabeli bars i utworzenie fizyczne tylko tabeli bars_foos, która i tak będzie względnie mała. Nie mogę jednak znaleźć sposobu na użycie TestFixture w normalnym Controller.

Drugim rozwiązaniem jest zapisywanie do pola JSON'a albo serializowanego Array zamiast tabeli pośredniej. Tylko nie wiem jak zrobić żeby CakePHP widziało coś takiego jako relację.

Opis problemu z przykładem z życia:

Mam tabelę z rowerami Bikes. I każdy rower ma swój main_type . Który teraz może być jednym z listy {"MTB","Road","Trekking","City","Downhill"} . Wiem że przez długi czas lista nie urośnie, bo nowe rodzaje rowerów nie powstają co dzień. Jeśli komuś wydaje się że może być setki rodzajów rowerów "cyclo cross", "ATB" "XC" itp., to powiedzmy że mam drugie pole parametr specialized_type. To musi być relacja HABTM, ale tabela main_types będzie bardzo małą i chciałbym znaleźć bardziej wydajne rozwiążanie.

Ponieważ:

    - To obciąża MySQL w obliczeniach
    - Komplikuje zapytania do MySQL
    - Muszę robić dodatkową tabelę dla MainType
    - Mam więcej modeli do odczepienia (unbind) kiedy chcę pobrać obiekt korzystając z recursive a nie każdego powiązanego obiektu
    - Wstaw tutaj cokolwiek chcesz...
kleus
Jeżeli poradziałeś sobie z tym w jakiś sposób to bardzo proszę podaj rozwiązanie.
Jeżeli nie to omiń to trochę i zrób to na zasadzie, że każdy rower ma wiele cech, oprócz rodzaju roweru: miejski, szosowy itp, rower posiada przecież jeszcze takie cechy jak kolor, marke, itp itd

Zrób table features i z poziomu cms dodawaj wartosci cech.
Podpacz jak jest napisany plugin users przez CakeDC - tam właśnie występuje podobne roziwązanie smile.gif

pozdrawiam
kicaj
Wydaje mi się, że stosowanie tabel dla HABTM typu bars_foos nie obciąża MySQL gdyż Cake i tak tworzy to jednym zapytaniem, np. LEFT JOIN.

Ja bym zrobil to tradycyjnie poprzez HABTM:
Bike HABTM Type (tabele: bikes, bikes_types, types)
Do tego formularz dla dodawania wartości dla Type.name (który rzadko będzie używany, ale będzie...) i formularz dla dodawania nowego roweru i z selectem do wyboru typu, a pod nim link do dodawania nowego typu

P.S. Możesz jeszcze wykorzystać pole combobox select w jQuery
barteknasi
załóż sobie drugą bazę sqlLite w pliku i zrób HBTM do tabeli w tej bazie.
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.