Router::filter_out robí 200 queries
Notice: This thread is very old.
- iNviNho
- Member | 352
Jednoduchá tabuľka kategorií, ktorá má id_kat, nazov … url
Nastavil som si routu, ktorá funguje
<?php
$router[] = new Route('[<lang [a-z]{2}(?<!sk)>/]produkty/kategoria[/<id>]', array(
'lang' => 'sk',
'presenter' => 'produkty',
'action' => 'kategoria',
'id' => array(
Route::FILTER_IN => function ($id) {
if (is_numeric($id)) {
return $id;
} else {
$vysledok = dibi::query("SELECT id_kat FROM kategorie where url=%s",$id)->fetchSingle();
return $vysledok;
}
},
Route::FILTER_OUT => function ($id) {
if (!is_numeric($id)) {
return $id;
} else {
$vysledok = dibi::query("SELECT url FROM kategorie where id_kat=%i",$id)->fetchSingle();
return $vysledok;
}
})));
?>
Avšak nerozumiem tomu, ale ked sa pozriem do queries, tak tam vidim 360 queries do samotnej databáze a vyzerajú presne ako queries, ktoré su v Route::filter_out, niektoré sa tam dokonca opakujú …
Ak túto routu komentnem, tak sa mi zmenší počet queries na 179 (tie už súvisia s app) …
Napríklad ak som v kategorií s ID 53, tak sa to isté query opakuje vo filtre cca 30×
Naozaj tomu nerozumiem
- iNviNho
- Member | 352
Ďakujem, ja som to v ten den vyriešil a som na to zabudol.
Moje riešenie :
<?php
$kat = dibi::query("SELECT id_kat, url FROM kategorie")->fetchPairs("id_kat","url");
$router = new RouteList();
$router[] = new Route('[<lang [a-z]{2}(?<!sk)>/]produkty/kategoria[/<id>]', array(
'lang' => 'sk',
'presenter' => 'produkty',
'action' => 'kategoria',
'id' => array(
Route::FILTER_IN => function ($id) {
if (is_numeric($id)) {
return $id;
} else {
$vysledok = dibi::query("SELECT id_kat FROM kategorie where url=%s",$id)->fetchSingle();
return $vysledok;
}
},
Route::FILTER_OUT => function ($id) use ($kat) {
if (!is_numeric($id)) {
return $id;
} else {
$vysledok = $kat[$id];
return $vysledok;
}
})));
?>