Vlastní Nette\Database\Reflection

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Eda
Backer | 220
+
0
-

Ahoj.

Chci teď na jeden starší projekt nasadit Nette\Database a narazil jsem samozřejmě na problém, že schéma databáze vůbec neodpovídá konvencím, pro které je Nette\Database přizpůsobené. Našel jsem, že tento problém se dá řešit za pomoci vlastní implementace třídy Reflection.

Zvolil jsem řešení „zadrátovat“ si stávající tabulky přímo do PHP kódu, protože ve schématu databáze nejsou ani cizí klíče, a tak nelze použít Autodiscover. Napsal jsem funkci getPrimary (jasné – k dané tabulce mi vrátí sloupec, který je PK; btw: jak je to s tabulkami, které mají vícesloupcový PK? zatím, předpokládám, neimplementováno) a pak jsem se snažil pochopit, co mám vracet funkcí getHasManyReference. Stále ale nějak nechápu, co dostanu jako parametr a co mám vrátit.

Například v API (zde: https://api.nette.org/…lection.html#…) je v popisku funkce getHasManyReference uvedeno „Gets referenced table & referenced column“ (tzn. dostane odkazovanou tabulku a odkazovaný klíč), ale přitom v popisu parametrů je „$table – source table, $key – referencing key“ (zdrojová tabulka = podle mne odkazující; odkazující klíč) a v returnu „array(referenced table, referencing column)“ (odkazovaná tabulka, odkazující klíč).

Jak to tedy je? Co dostanu na vstupu a co mám vrátit? V jakých situacích bude tato funkce volána?

Díky moc.

Editoval Eda (22. 5. 2012 0:30)

jtousek
Člen | 951
+
0
-

Složené primární klíče skutečně implementovány nejsou. V podstatě se to řeší tak, že si přidáš další sloupec, nejčastěji id, ten dáš jako PK a na ten původní složený PK dáš unique constraint.

Nebylo by možné ty chybějící primární klíče do té databáze doplnit? Řešil jsem to na jiném projektu a po doplnění cizích klíčů a odladění několika bugů vše fungovalo správně.

juzna.cz
Člen | 248
+
0
-

Podivej se do zdrojaku IReflection, tam to mas i s prikladem (na vzorove databazi s knihama, co najdes napr. v testech).

hrach
Člen | 1838
+
0
-

Phpdoc je tam spravne. Ty prikadly by fakt snad meli pomoct :D vsak vim, proc sem je tam psal :D bez nich je to lehce slozitejsi pochopit :D