Komponenty pro zobrazení výsledků dotazu

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

Zdravím, prosim o radu ohledně komponent a DiBi.

  1. Mám komponentu ‚seznam_vysledku‘, která zjistí ID všech řádků které odpovídají SELECT dotazu.
  2. V té přes UI\Multiplier vytvářím komponenty ‚vysledek‘, které v konstruktoru dostávají ID řádku v databázi a sama komponenta si vytáhne z DB data pro dané ID

Problém:

Když budu mít na stránce 50 komponent ‚vysledek‘, tak se mi 50× pošle do DB ten samej SELECT. (velká zátěž na DB? )

Jako první mě napadlo vytáhnout všechny data už přes komponentu ‚seznam_vysledku‘ a v komponentě ‚vysledek‘ už je jen zobrazit. Jenže tim bych přišel o možnost používat komponentu ‚vysledek‘ nezávisle na její nadřazené komponentě (nedokáže si sama zjistit data, které má obsahovat)

Jak tohle řešíte vy?

blacksun
Člen | 177
+
0
-

Udělej komponentě metodu pro naplnění dat a tu volej při vytváření, pokud máš data už z prvního výsledku. A do komponenty logiku např. před vykreslením, že pokud data nemá, ale má jen ID, které má vždy, tak se dotáže modelu.

Ondřej Altman
Člen | 17
+
0
-

Vyzkouším, díky.

Ještě mě napadlo..kdyby v budoucnu tam přibyla ještě jedna dvojice komponent

projekty_seznam

>projekt-1
>> fotogalerie
>>> fotka-1
>>> fotka-2

>projekt-2
>> fotogalerie
>>> fotka-1
>>> fotka-2
>>> fotka-3

Dá se to taky zvládnout jedním dotazem?

Editoval Ondřej Altman (19. 6. 2012 17:14)

jtousek
Člen | 951
+
0
-

Mám pocit že když by první dotaz natahal rovnou i data, tak další dotazy by se už nemusely spouštět protože by to bylo v cache.

Ondřej Altman
Člen | 17
+
0
-

jtousek napsal(a):

Mám pocit že když by první dotaz natahal rovnou i data, tak další dotazy by se už nemusely spouštět protože by to bylo v cache.

Trochu teď nerozumím, jakým způsobem tedy můžu k těm datům přistoupit?

jtousek
Člen | 951
+
0
-

Normálně přes SQL dotaz. Až na to, že ten SQL dotaz by se neměl provést protože potřebná data by Nette\Database měla najít v cache.

Ondřej Altman
Člen | 17
+
0
-

jtousek napsal(a):

Normálně přes SQL dotaz. Až na to, že ten SQL dotaz by se neměl provést protože potřebná data by Nette\Database měla najít v cache.

A dá se to nějak vyřešit i pro DiBi? (Pokud teda správně předpokládam, že Nette\Database != DiBi)

jtousek
Člen | 951
+
0
-

Aha ty to vlastně píšeš hned v prvním příspěvku že používáš dibi, to pardon. Bohužel s dibi jsem nepracoval už ani nepamatuju takže nevím. Spíše ale počítej, že ne, myslím že dibi v sobě žádnou cache implementovanou nemá.

Jedno si ale odpustit nemohu – a to doporučení přechodu na Nette\Database. ;-)

Ondřej Altman
Člen | 17
+
0
-

jtousek napsal(a):

Aha ty to vlastně píšeš hned v prvním příspěvku že používáš dibi, to pardon. Bohužel s dibi jsem nepracoval už ani nepamatuju takže nevím. Spíše ale počítej, že ne, myslím že dibi v sobě žádnou cache implementovanou nemá.

Jedno si ale odpustit nemohu – a to doporučení přechodu na Nette\Database. ;-)

Díky za radu, pouvažuju o tom :)