![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 1 Dołączył: 11.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
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ż:
- 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... |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 7 Dołączył: 22.10.2009 Skąd: Siędzę Ostrzeżenie: (0%) ![]() ![]() |
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 (IMG:style_emoticons/default/smile.gif) pozdrawiam |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 640 Pomógł: 28 Dołączył: 13.02.2003 Skąd: Międzyrzecz/Poznań Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 1 Dołączył: 21.08.2013 Ostrzeżenie: (0%) ![]() ![]() |
załóż sobie drugą bazę sqlLite w pliku i zrób HBTM do tabeli w tej bazie.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 19:49 |