Vytvářet (používáte?) pohledy namísto složitějších selectů?
- jh
- Člen | 22
Zdravím,
používáte pohledy pro složitější dotazy?
Např. budu mít článek, který může mít nějaké tagy. Logicky dochází
k dekompozici a vzniku třetí tabulky clanky_tagy.
Takhle by vypadal např. mysql dotaz s tím, že bych na výstupu chtěl název článku a seznam tagů oddělené čárkou:
<?php
SELECT clanky.name AS nazev, GROUP_CONCAT(tag.name SEPARATOR ', ') AS tagy
FROM clanky
LEFT JOIN clanky_tagy ON clanky.id = clanek_id
JOIN tagy ON tagy.id = tag_id GROUP BY clanky.name;
?>
Kdybych si to definoval jako pohled, tak bych se mohl krásně dotazovat jen jako
<?php
SELECT * FROM nazevPohledu;
?>
takže by to bylo super i pro použití s Nette\Database\Table\Selection
Zatím jsem ale na žádném webu, co jsem spravoval, neviděl, že by někdo používal pohledy, tak jsem k tomu trochu skeptický. Nemá to nějaké extremní nevýhody?
Dělali jste si někdo nějaký benchmark, jestli je rychleší nasypat do db
např. tenhle dotaz jako jeden, přes nějakou obecnou metodu v Nette\Database
nebo používat tu NotORM syntaxi, kde se vytvoří postupně hned několik
dotazů.
V Nette\Database\Table\Selection by asi navíc ani nešlo použít ten
group_concat a musel bych to pak implodnout, že?
- Filip Procházka
- Moderator | 4668
Doporučoval bych ti pročíst si: https://forum.nette.org/…-orm-pro-php a https://forum.nette.org/…ny-na-notorm
- Ot@s
- Backer | 476
Ano, používám to. Resp. pokud je to pro mě výhodnější, tak složitější SQL konstrukce ukládám do pohledu. V kódu to vypadá přehledněji a pokud používáš externí komponenty typu Gridito, tak si ušetříš spoustu starostí. Benchmarky pohledů neřeším, páč mám důvěru v optimalizátor dotazu databázového serveru (pokud ten SQL napíšeš dobře, v pohledu to horší nebude, spíše naopak). Samo to s sebou nese nějaké omezení (např. hodně parametrizovaný/závislý SQL dotaz), ale ty se řeší za pochodu.