Nette/Database vícenásobná volání ->where() v šabloně

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

Model

public function getSvatky()
{
  return $this->database->table('svatky');
}

Presenter

$this->template->svatky = $this->model->getSvatky();

Šablona

Dnes: {foreach $svatky->where("den", Date(d))->where("mesic", Date(m)) as $a}{$a->jmeno}{/foreach}
Zítra: {foreach $svatky->where("den", Date(d, time()+86400))->where("mesic", Date(m, time()+86400)) as $a}{$a->jmeno}{/foreach}

Problém:
Sekce „dnes“ v šabloně je ok. Sekce „zítra“ v sql obsahuje ve where 4krát podmínku(den, mesic, den, mesic), protože se tam uchovaly podmínky i ze sekce „Dnes“. Neví někdo, jak to nejlépe vyřešit?

EDIT:
Zde přidávám generovaný sql pro lepší názornost:

WHERE (`den` = ?) AND (`mesic` = ?) AND (`den` = ?) AND (`mesic` = ?)

Editoval Radimorous (4. 2. 2012 23:38)

pawouk
Člen | 172
+
0
-

Budto si do sablony predej model a pak v sablone zavolej $model->getSvatky(), ale to by spoustu lidi povazovalo za prasarnu, ackoliv ja v tomto pripade temer nevidim rozdil. A nebo přes ten clone, to je asi trochu návrhově čistší… Nebo si to co máš v šabloně hod do presenteru a je to, tedy:

Presenter:

$this->template->svatkyDnes = $this->model->getSvatky()->where("den", Date(d))->where("mesic", Date(m));
$this->template->svatkyZitra = $this->model->getSvatky()->where("den", Date(d, time()+86400))->where("mesic", Date(m, time()+86400);

S tímto bude asi kodér spokojen nejvíce :-)