Filtr v routě pracující s databází odesílá dotaz k databázi na každé stránce webu

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

Zdravím, potřeboval bych s něčím poradit. Píši si aplikaci s vícero moduly a všelijakými presentery. Problém je v tom, že ve všech modulech ve všech jejich presenterech se neustále posílá dotaz do databáze:

SELECT article_title_webalized
FROM `articles`
WHERE `article_id`=0

Což vlastně odpovídá jediné mé metodě ArticleModel::getWebalizedTitleById($id), která je volána pouze v bootstrapu jako filter routy (nahrazuje id za webalized název):

<?php
$router[] = new Route('blog/clanky/<id>/', array(
		'module' => 'Frontend:Blog',
		'presenter' => 'Article',
		'action' => 'show',
		'id' => array(
				Route::VALUE => 0,
				Route::FILTER_OUT => callback('ArticleModel::getWebalizedTitleById'),
				Route::FILTER_IN => callback('ArticleModel::getIdByWebalizedTitle'),
		),
));
?>

Dá se to napsat nějak lépe, abych se všude zbytečně nedotazoval do databáze?

Aurielle
Člen | 1281
+
0
-

Cache, nic víc tam asi nevymyslíš… třeba natáhnout si vše při prvním requestu a pak to už akorát vybírat z pole, což ale bude nevýhoda při velkém počtu záznamů…

Ani
Člen | 226
+
0
-

Si to v tom ArticleModel::getWebalizedTitleById ukládej do cache/pole. Myslim že v nette je nějaká array cache, která by se na to asi hodila.

umrlec
Člen | 56
+
0
-

Děkuji za tipy

fak
Člen | 48
+
0
-

Ahoj,

jsem z těch vylepšených rout zmaten, co vlastně přijímají ty callbacky a co musí vracet, aby router poznal, že platí tahle routa, nebo že jí má přeskočit?

chtěl bych mít routy typu /stranka-v-DB
ale i /presenter/action/id

Díky za rady