1

Temat: Baza-Model-Relacje

Witam,
dopiero zaczynam zabawę z CakePHP więc nie wiem wszystkiego. Mam pewien problem. Zacznę najpierw od bazy:
http://img28.imageshack.us/img28/3646/testkb.th.png
Tak mam ułożona bazę, stworzyłem sobie tak na szybko wykorzystując bake. Aktualnie tabele mam połączone w sposób:
1. Person model(dla tabeli People):

var $belongsTo = array(
        'Type' => array(
            'className' => 'Type',
            'foreignKey' => 'type_id',
        ),
        'Degree' => array(
            'className' => 'Degree',
            'foreignKey' => 'degree_id',
        ),
        'Institute' => array(
            'className' => 'Institute',
            'foreignKey' => 'institute_id',
        )
    );


2. Type:

var $belongsTo = array(
        'Habilitation' => array(
            'className' => 'Habilitation',
            'foreignKey' => 'habilitation_id',
        ),
        'Professor' => array(
            'className' => 'Professor',
            'foreignKey' => 'professor_id',
        ),
        'Doctor' => array(
            'className' => 'Doctor',
            'foreignKey' => 'doctor_id',
        )
    );

    var $hasMany = array(
        'Person' => array(
            'className' => 'Person',
            'foreignKey' => 'type_id',
            'dependent' => false,
        )
    );

3. i np professors:

var $hasMany = array(
        'Type' => array(
            'className' => 'Type',
            'foreignKey' => 'professor_id',
            'dependent' => false,
        )
    );

pozostałe 2 doctors, habilitations są podobne(będą). Zadaniem moim jest aby przy tworzeniu nowej osoby(tabela People) zaznaczyć przypisanie do któreś z tych trzech D/P/H. Po to stworzyłem tabele types, tylko nie bardzo wiem czy dobrze relacje w cake utworzyłem. Zacząłem się zastanawiać czy do połączenie nie wykorzystać aftersave() gdzie po zapisaniu w tabeli osobnika ręcznie utworzyć połączenie do wybranej tabeli.

Jakby coś było niezrozumiałe to pytać wytłumaczę ;]

2

Odp: Baza-Model-Relacje

Hi,

jestem zaspany, czytalem pobieznie, ale z moich oswiadczen wynika ze bindowanie modeli w callback'ach to zly pomysl, z czasem jak aplikacja sie rozwinie (nigdy nie mow nigdy) inny model byc moze bedzie chcial zapisac jakies dane, i trafi na bindowanie w callback'u.  Bindowanie wszytskiego jak popadnie zgodnie z modelem bazy i jego relacjami (na sztywno jako pol modelu)  to tez zly pomysl, w koncu dojdziesz do momentu w ktorym Edytujac instytuty, bedziesz miec dostep do modeli Doctor, Profesor .. itd, mozna ograniczac przez recursive, ale to takie dzialanie na sile i raczej dobre dla malych aplikacji z 3 tabelami wink

Zrob sobie jakas metode modelu np updateRecord($data), dobinduj co potrzeba, o ile potrzeba i to powinno zalatwic sprawe. Co prawda moze dojsc do zwielokrotnienia kodu odpowiedzialnego za bindowanie, ale aplikacja zyska na lekkosci wink

Odnosnie bazy ....  "ja tu widze niezly burdel" , jak krzyczal Sturh wink

Co bys powiedzial na takie types :

id int(11)
model varchar(64) - Nazwa Modelu np Doctor
model_id int(11) - id z odpowiedniego modelu np 11 - Wskazuje na record 11 w tabeli doctors
name varchar

teraz tabela types staje sie tabela laczaca w asocjacji habtm   =>   http://book.cakephp.org/view/83/hasAndB … Many-HABTM


Druga sprawa model Degrees - bedziesz to edytowac, czy sklepiesz raz i tak zostanie po wsze czasy?  Jezeli to drugie, to zrob z tego pole enum tabeli  people.

I na koniec, po co powielac te same tabele, naweyt trzymajace te same dane ...

Doctor/ Profesor / Habilitacja - wszystkie wspolne pola wpakuj w jedna tabele, wydziel kolejne/kolejna na pola wlasciwe dla profesorow , doktorow itd ....

Ostatnio edytowany przez robal77 (2010-02-23 22:30:27)