Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Cake i problem z bazą
Forum PHP.pl > Forum > Gotowe rozwiązania
Radzio12
Witam !. Jestem twórcą pewnego dużego portalu i chciałbym go zmodyfikować używajac do tego frameworku "cake". Problem polega na tym, że portal jest bardzo rozbudowany i ma juz swoją strukturę bazy danych i nie chciałbym jej zmieniać ("trwałoby to kilka lat:)"). W jaki sposób mogę sie dostać do danych w bazie. Np. Mam moduł "Home" dla strony głownej. Strona ta zawiera menu, kolumny i i wiele danych pobieranych z róznych tabel. Według specyfikacji MVC, mogę mieć dostęp do tabeli "Home", mogę również użyć $hasmany itp.. ale nie o to przecież chodzi. Czy jest jakiś sposób żeby to obejść.

z góry dziękuje
dr_bonzo
Przenosze: php Pro --> Gotowe skrypty
siemakuba
Zakładam, że chodzi ci framework CakePHP. Zakładam też, że problem rodzi się z tego, że masz już określoną strukturę bazy, której nie chcesz zmieniać, a nie jest ona zgodna z wymaganiami CakePHP.

Jeżeli chodzi o modele w CakePHP, to wiele rzeczy możesz ustawić "po swojemu".
Zajrzyj np. tu: http://manual.cakephp.org/chapter/models, sekcja 3.

Cytat
$useTable

If the database table you wish to use isn't the plural form of the model name (and you don't wish to change the table name), set this variable to the name of the table you'd like this model to use.


Większość informacji znajdziesz w dokumentacji. To, czego nie znajdziesz w dokumentacji znajdziesz w kodzie, z którym tak czy inaczej będziesz musiał się zapoznać.

pozdr.
Radzio12
Znam użycie, $useTable natomiast chodzi mi o to że np. w modelu "Home" potrzebuje dostepu do kilkunastu tabel a tutaj standardowe użycie modelu nie wystarczy. Czy jedynym rozwiazaniem jest użycie asocjacji tabel? a poza tym to rozwiązanie wymusza użycie kolejnego modelu itd.
siemakuba
Jakiś czas już nie zaglądałem do CakePHP, ale czy przypadkiem to nie Controller decyduje o tym jakie modele wykorzystuje?

Mając HomeController podajesz w nim jakie modele potrzebujesz i korzystasz z nich do pobrania odpowiednich danych. Nie bardzo wiem dlaczego jeden model Home ma odpowiadać za dostarczenie wszystkich danych potrzebnych do wyświetlenia strony głównej?

Ja widzę to raczej tak:
- HomeController korzysta z modelów: News, Categories, Articles, Whatevers
- HomeController pobiera z odpowiednich modeli odpowiednie dane i przekazuje do widoku.

Jeżeli dobrze zrozumiałem, próbujesz stworzyć jeden model, który dostarczy ci wszystkich potrzebnych danych z wielu różnych tabel. Założę się też, że na stronie nie wszystkie dane pokazywane na stronie są ze sobą faktycznie powiązane np. przez relacje w bazie. Takie rozwiązanie byłoby więc maksymalnym przekombinowaniem, chociaż może fajnie byłoby zrobić:
  1. <?php
  2. // HomeController Class
  3. $this->Home->GetAllDataNeededToDisplayHomepage();
  4. ?>
i dostać wszystkie dane smile.gif Chyba żaden framework nie da aż takiego Rapid Development smile.gif

pozdr.

P.S. jeżeli źle rozumuje, popraw mnie. Opieram się na tym co zrozumiałem z tego co chcesz osiągnąc.
_KuRT_
mozna dla kazdej tabeli zrobic model w ktorym ustawiamy $useTable, nastepnie np w Controllerze Home ustawiamy:

Kod
<?php
class HomeController extends AppController
{
    var $name="Home";
    var $uses=array("Home","Users",.....);



w miejsce "....." wstawiamy uzywane w tym Controllerze Modele (tabele).
Radzio12
Dzieki za pomoc, twoja rada była przydatna pomimo, że szukałem troszkę innego rozwiązania snitch.gif . W mojej bazie jest ponad 300 tabel więc tworzenie 300 modulow czy kontrolerów może nie być najlepszym rozwiązaniem, ale z drugiej strony kazdy modul bedzie zawierał osobny zestaw funkcji, więc bedzie ich dużo , ale bedą uporządkowane.

Dzieki za radę i pozdrawiam
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-2024 Invision Power Services, Inc.