PostgreSQL reference mezi tabulkami

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

Zdravím – dle mého prvého příspěvku lze soudit, že jsem Nette-Lamma;

Používám Nette 2.0, s PHP 5.3, PostgreSQL;

Budu se ptát na věc, která se nejspíše někde kolem řešila, nicméně já ji úplně nerozumím, proto se ptám na pomoc.

Mám řekněme tabulku Faktura, FakturaŘádak a Zákazník. Řádek ukazuje faktura_id do Faktura, Faktura zase na zakaznik_id. Chci docílit toho, že si načtu objekt Faktura, který bude sám (čili automaticky) schopný natáhnout všechny řádky (čili filtr na FakturaŘádak dle faktura_id) a též natáhnout zákazníka (pouze zákazníka umím vytáhnout).

Chci toho docílit na pokud možno co nejvyšší vrstvě (Nette Database…?), bez konkrétních dotazů pro PG. Jen nevím jak toho docílit, aniž bych si k entitě Faktury nacpal metadata (koho odkud má sosat).

Hodně jsem toho prošel, hodně pročetl, ale už jsem z toho dosti zdrcaný, takže možná něco přehlížím. Zcela jsem nepochopil DatabaseReflection a příklad z Wiki Databáze & ORM – nejspíš mi bude stočit drobné šťouchnutí abych se rozvalil správnou cestou; článek o extrakci metadat z Postgre od Alberta jsem též našel a četl (nicméně metoda se mi nelíbí, protože dotazy jsou velice náročné).

Díky za případné odpovědí – a přeji pěkné ráno

jtousek
Člen | 951
+
0
-
  1. Začátečníkovi bych doporučil MySQL.
  2. Pokud přeci jen chceš PostgreSQL, budeš potřebovat vývojovou verzi Nette. Tam je to implementované, na ten článek o extrakci od Alberta jsi měl hodit link, netuším o čem mluvíš.
  3. Nette\Database to co popisuješ dělá tak jednoduše, že to jednodušeji snad už ani nejde:
//objekt faktura
$faktura = $connection->table('faktura')->get($id);
//zpracování řádků
foreach ($faktura->related('radek') as $radek) { ... }
//objekt zákazník
$zakaznik = $faktura->zakaznik;
//nebo rovnou
$faktura->zakaznik->name;
Ellesmess
Člen | 21
+
0
-
  1. na MySQL mám těžkou alergii – databáze mám kreslené v Postgre a nemůžu si je vynachválit
  2. ano. na tyto funkce jsem přišel; splnili první, ze tří požadavků, který jsem měl
  3. pravda, Nette Database je vskutku fajn :)

dodatek:
To, co jsem chtěl byl důsledek chybného návrhu. Ráno po cestě do práce se mi úspěšně podařilo najít mnohem lepší řešení, které je i kontrolovatelnější (přeci jenom v mém původním požadavku, když bych načetl zákazníka a jeho 300 faktur s 6000 řádky by nebylo úplně to pravé ořechové…). Tudíž tímto můj dotaz propadá do hlubin pekelných – omlouvám se za šum :)