id to slug – všechny stránky z db nebo mnoho dotazů?

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

ahoj, mám routu

<?php
$frontRouter[] = new Route('[<lang=cs (cs|en)>/][<action ('.implode($container->parameters['pages'], '|').')>][/<id>]', 'Homepage:default');
//pokud statická stránka neexistuje dohledá se v db
$frontRouter[] = new Route('[<lang=cs (cs|en)>/]<id>', array(
    'presenter' => 'Homepage',
    'action' => 'article',
    'id' => array(
	Route::FILTER_IN => array($container->pageControl, 'getIdByUrl'),
	Route::FILTER_OUT => array($container->pageControl, 'getUrlById')
    )
));
?>

ale nastává problém, když se překládá „getUrlById“ protože pokud je na stránce velké množství dotazů, tak se do db dotazuji třeba i 10× což mi nepřijde zrovna geniální.

<?php
public function getUrlById($id)
    {
	return $this->db->query("SELECT [webalized_title] FROM [pages] WHERE [id] = %i", $id)->fetchSingle();
    }
?>

taky je možnost vytáhnout všechny stránky do asociativního pole id ⇒ webalized_title ale při velkém množství stránek to bude ještě horší.

Jak to řešíte vy?
Díky za rady :-)

Editoval xtbman (8. 11. 2012 17:29)

Arynev
Člen | 33
+
0
-

Zatím to řeším milionem dotazů, ale co je ukládat do cache pole [][id, webalized] a vždy když se tam odkaz nenajde, vytvoří se a „přiloží“?

xtbman
Člen | 24
+
0
-

Nad tím jsem také přemýšlel, ale pokud těch stránek bude opravdu hodně, tak možná těch x dotatů do db bude rychlejší než unserialize tak velikého pole.
Možná ideální by bylo tvořit odkazy rovnou:

<?php
n:href="Homepage:article id=>$webalized"
?>

a pak v akci presenteru dohledat pouze ID k tomu webalizovanému stringu.
Zajímalo by mě zda by to šlo udělat už v routě. Url by zůstala neměnná, ale parametr ID by presenteru předával integer id.

Editoval xtbman (10. 11. 2012 11:35)