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
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
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 :-)