Tomasz Ducin

Tomasz Ducin System Designer &
Architect, Trainer

Temat: dziedziczenie propel/symfony

czy któryś z szanownych kolegów wie jak można zaprojektować strukturę bazy danych w taki sposób, żeby uwzględnić w nim dziedziczenie? Owszem, wiem że można sobie po prostu dziedziczyć klasy, ale mi chodzi o to, żeby było to na poziomie struktury w schema.yml, na przykład:

klasa human: kilka jakichś oczywistych danych, tworzą się klasy:
Human: BaseHuman
HumanPeer: BaseHumanPeer.

klasa pracownik biurowy: dodatkowy duży zestaw danych, schemat dziedziczenia:
BaseOfficeWorker: Human
BaseOfficeWorkerPeer: HumanPeer
OfficeWorker: BaseOfficeWorker
OfficeWorkerPeer:: BaseOfficeWorkerPeer

i np klasa menadżer:
BaseManager: Human

================
no i HUMAN samo w sobie (tabela) w bazie istnieć nie musi.
================
byłoby to przydatne gdyby np. tworzyć jakieś skomplikowane metody, które byłyby wykorzystywane przez wszystkie klasy dziedziczące, takie typowe zastosowanie podejścia obiektowego.

Znalazłem takie oto rozwiązanie, jest ono jednak dalekie od idealnego (lub przynajmniej "dalekie od dobrego")
http://www.symfony-project.org/snippets/snippet/218
Jeśli np mieć dużo atrybutów (klasy dziedziczącej) to trzeba się mnóstwo opisać...
Zastanawia mnie czy nie dałoby się w schema.yml dodać np takiego czegoś:

propel:

human:
_attributes: { phpName: Human }
id:
...

manager:
_attributes: { phpName: Manager, inherit: Human }
id:
...

Nie zagłębiałem się jakoś szczególnie głęboko w Propela (kod symfony póki co jest sam w sobie dość zawiły).

Może wywiąże się z tego jakaś ciekawa dyskusja :)
Piotr Paryna

Piotr Paryna webdesigner

Temat: dziedziczenie propel/symfony

Też kiedyś tego szukałem i znalazłem tylko podany przez Ciebie snippet.

Do schema.yml oczywiście mogłbyś dopisywac frazy "inherit", ale to wiąże się ze zmianą kodu generującego model:), aby propel wiedział co to jest "inherit"
Tomasz Ducin

Tomasz Ducin System Designer &
Architect, Trainer

Temat: dziedziczenie propel/symfony

wydaje mi sie, że to nie byłoby jakoś tragicznie ciężkie do napisania dla propelowców... Może warto wystawić ticketa?



Wyślij zaproszenie do