Cachovaná hodnot v šablone/selectu z db

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

Zdravím, řeším menší problém s nechtěným Cachováním. Z modelu pomoci této syntaxe:
$where = array(
‚cas > ?‘ ⇒ $time,
‚datum >= ?‘ ⇒ $date
);
return $this->db->table(‚programy‘)->where($where)->group(‚program‘)->limit(4);

Získám potřebné hodnoty a předám je presenterovi a následně do šablony. Funguje to tak, že to vybírá hodnoty dynamicky podle toho „jaký je čas“, ale ve výsledku je to zaseknuté na prvním SELECTu. V laděnce vidím 1 query.

Viz. http://ukol.sound-agency.cz

Dá se nějak vyřešit, aby se tenhle SELECT z DB necachoval ?

Děkuji moc.

Jan Mikeš
Člen | 771
+
0
-

Uvedenim ->select(„*“)

	$this->db->table("programy")->select("*")->where($where)->group(‚program‘)->limit(4);

Vypnes cachovani u uvedeneho dotazu.

jasin755
Člen | 116
+
0
-

Díky za odpověď. Ještě mě napadá, kdybych chtěl vybrat jen nějaké sloupce a POUŽÍT CACHE tak bych toho dosáhl jak ?

Jan Mikeš
Člen | 771
+
0
-
	$this->db->table("programy")->select("sloupec1, sloupec2, sloupec3")->where($where)->group(‚program‘)->limit(4);

Tyto sloupce se ti vyselektujou vzdy, at uz je pouzijes nebo ne. Dale je treba davat pozor, ze se ti vyselektuji pouze tyto sloupce a ne zadne jine, pokud treba budes chtit pracovat se sloupcem id ale neuvedes ho tam, pak ti to bude vyhazovat PDOException.

Edit: cache bez uvedeni ->select() zde totiz funguje tak, ze pri prvnim zavolani se vyberou vsechny sloupce tabulky a pri druhem zavolani uz jenom ty, ktere byly pouzity. Pri ->select() si urcujes sam co se bude volat vzdy.

Editoval Lexi (23. 3. 2013 17:26)

jasin755
Člen | 116
+
0
-

Tak bohužel je někde ještě zádrhel. Mám tam dynamickou podmínku WHERE, která se mění podle času a v laděnce se dívám a je zasekla na nějaké hodnotě. Když ji ručně přepíšu, tak to funguje, jinak ne.

public function get_programs(){

  $time = (int)date("Hm",time()); // 05:00 => 500
  $date = date("Y-m-d",time()); //23.03.2013

  $where = array(
    'cas > ?' => $time,
    'datum >= ?' => $date
  );

  return $this->db->table("programy")->select("program,datum,cas,nazev,zanr,stopaz,popis,obrazek,ivysilani,zvuk,titulky,neslysici,live,premiera,pomer,hd")->where($where)->order("cas")->group("program")->limit(4);
}
jasin755
Člen | 116
+
0
-

Tak už jsem to našel, moje chyba :X ve funkce date ma byt „Hi“ ne „Hm“