Cachovani SELECTu pomoci Nette\Caching\Cache

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

Mam takovy problem. Potreboval bych cachovat vysledky z jednoho sloziteho SELECTU, vysledky z nej se meni jen obcas, takze se to vyplati treba invalidovat klidne 1× za den. Ale jak na to? Zkusil jsem cache v templatu, to se sice nacachovalo, ale v debug baru porad vidim, ze se ten select dela. Obalil jsem foreach cachei, takze tohle asi moc nefunguje. Pak me napadla druha moznost si ten vysledek v cyklu prevest na pole a to pak cachovat, ale prijde mi to trochu prasacke a taky tim prijdu o moznost mit Nette\Database\Table\Selection v templatu. Je jeste naka jina moznost jak by se to elegantne dalo udelat? Predem diky.

Editoval saimons (6. 6. 2014 12:25)

David Matějka
Moderator | 6445
+
0
-

A nevolas neco v presenteru, co zpusobi vykonani dotazu?

akadlec
Člen | 1326
+
0
-

tipnu si že v presenteru zavoláš nějaké execute na ten dotaz tak proto se ti cachuje. ASi bych to cachoval přímo v presenteru a nebo si to do template předávat jako callback.

saimons
Člen | 293
+
0
-

Priznam se ze cakkback pouzivatat neumim, takze kdyby byla naka lehoucka ukazka jak to myslis, bylo by to fajn. V soucasnosti volam v presenteru metodku, ktera vraci Nette\Database\ResultSet a ten predavam do template a foreachem vypisuji. V template se jeste odkazuji, pres ref() na dalsi tabulku, ale to by snad tomu vadit nemelo. Jinak nic co by melo volat ten SQL dotaz znovu.

saimons
Člen | 293
+
0
-

Uz jsem na to prisel, diky za nakopnuti. Nakonec jsem predal do templatu celej objekt a volal metodu az v casti obalene cachei. Ale pokud by se ti chtelo mi ukazat jak se to da napsat pres callback, tak se rad podivam. Diky.

akadlec
Člen | 1326
+
0
-

Jo buď to můžeš udělat tak jak si psal, a nebo si předáš do template callback

$this->template->data = (function() use($toZcehoTOmaTahat) {
	return $toZcehoTOmaTahat->fetchAll()
});

snad to není blbost ;)