Problem s cache v Nette\Database
- JirkaN
- Člen | 7
Chtel bych se zeptat ke cachovani u databaze…
K databazi se pripojuji pres metodu init() v Modelu:
<?php
class Model extends Nette\Object
{
static public $db;
static function init($config)
{
self::$db = new Nette\Database\Connection($config->dsn, $config->user, $config->password);
self::$db->cache = Nette\Environment::getCache('db');
}
function getCategories()
{
return self::$db->table('product_categories');
}
}
?>
Chapu spravne, ze pokud je cachovani nastaveno, tak si to pamatuje sloupce, ktere vyuziji pri selectu, a pri dalsim dotazu vybere z db jen tyto sloupce (tedy misto SELECT * to bude napr. SELECT id, name) ?
Narazil jsem ale na problem, ktery nevim jak vyresit.
Mam HomepagePresenter a CategoryPresenter, v obojim vlastne vykonavam stejny
dotaz, ktery se lisi akorat v podmince where.
HomepagePresenter mi zobrazuje hlavni stranku, ktera ma trochu jiny layout nez podstranky a zobrazuje text z databaze z tabulky „categories“.
<?php
$this->model->categories->where(array('url' => 'hlavni-stranka'))->fetch();
?>
CategoryPresenter mi pak zobrazuje podstranky a podle url vybere z databaze prislusnou kategorii, opet se jedna o tabulku „categories“.
<?php
$this->model->categories->where(array('url' => $url))->fetch();
?>
A problem nastava v tom, ze na HP potrebuji o sloupec (h1_seo) mene nez v podkategoriich, takze v podkategorii mi pak sloupec (h1_seo) v selectu chybi.
Poradi mi nekdo co s tim? Snad jsem to napsal aspon trosku srozumitelne.
Vim ze muzu vypnout to cachovani, ale prijde mi to skoda a co jsem zkousel, ma
to pomerne velky vliv na dobu vykonavani.