- norbe
- Backer | 405
Momentálně se porozhlížím po nějakém ORM a zajímalo by mně, jestli a případně jak jde v ORM které používáte/vytváříte vyřešit následující příklad:
Jsem zvyklý si často používané údaje vypočítat už v db, abych pak nemusel provádět dotaz pro každý řádek zvlášť. Jak ale pomocí ORM získám např. údaj o tom, kolik je produktů v dané kategorii(včetně podkategorií – předpokládám hiearchickou strukturu s lft a rgt)?
Pomocí SQL to řeším nějak takto:
Co jsem zatím zkouknul nějaké jednoduché příklady různých ORM, tak se to řeší getterem, který se volá pro každý řádek zvlášť. Existuje tedy nějaké ORM, které toto nějakým způsobem řeší, nebo zastáváte názor, že těch pár (desítek) dotazů se ztratí? :-)
- Patrik Votoček
- Člen | 2221
Tohle by teoreticko mohlo jít něják elegantně řešit v Doctrine 2.0… Popátrám a doplním odkaz (pokud to nestihne někdo rychleji)…
- srigi
- Nette Blogger | 558
Doctrine ma pomerne silny „dotazovaci“ jazyk DQL vid. dokumentacia. Ma aj vstavanu podporu Nested set (traverz. okolo stromu) a to aj s podporou pre fetch tree with reations
- srigi
- Nette Blogger | 558
vrtak-cz napsal(a):
OT: srigi nevíš kdy by měla být 2.0 finalizována (stable)?
Skus checknut tento slideshare.
- Honza Marek
- Člen | 1664
norbe napsal(a):
No to už mně taky napadlo. Ale jak bych pak provedl např. insert u ORM, které právě vznikají pro Dibi (Ormion, ActiveRecords – obě ORM se mi totiž velmi líbí :))? Umožňují nějak definovat, aby se data brala z pohledu a ukládala do tabulky?
U Ormionu si můžeš k Recordu nastavit vlastní mapper. Tzn. asi by sis podědil normální OrmionMapper a přepsal třeba metodu pro ukládání záznamu.
- JakubJarabica
- Gold Partner | 184
@phx:
Tiez zastavam podobny nazor, ale napriklad toto je velmi zaujimave: Digg NoSQL
- vrana
- Člen | 131
phx napsal(a):
Otazka zni zda vypocet MySQL nebude rychlejsi nez 2× MySQL + PHP. Predci jen v PHP jede cyklus N*(N-1).
Když se podívám na ten původní dotaz, tak moc nevidím šanci, že by se
na to daly efektivně využít indexy (zkuste si nad tím dotazem
EXPLAIN
).
Cyklus neběží v čase O(N*N), ale O(N*M), kde M je hloubka zanoření. To je dramaticky lepší, protože hloubka zanoření je obvykle nízká (nebo někdy dokonce programově omezena). O(N*N) by to bylo jen u stromů s jediným listem (neboli holých větví).