Nette Database. Skládání dotazu
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- TheNEoo
- Člen | 75
Ahoj,
chtěl bych se optat, jakým způsobem skládat dotazy do sql.
Nette 2.2.2
Php 5.5.x
Aktuálně mám:
private function buildQuery() {
if ($this->getFromLanguage() != 0 && $this->getToLanguage() != 0) {
return $this->db->findToTranslate()
->where('from =?', $this->getFromLanguage())
->where('to =?', $this->getToLanguage());
}
if ($this->getFromLanguage() == 0 && $this->getToLanguage() == 0) {
return $this->db->findToTranslate();
}
if ($this->getFromLanguage() == 0 && $this->getToLanguage() != 0) {
return $this->db->findToTranslate()
->where('to =?', $this->getToLanguage());
}
if ($this->getFromLanguage() != 0 && $this->getToLanguage() == 0) {
return $this->db->findToTranslate()
->where('from =?', $this->getFromLanguage());
}
}
Kdybych chtěl přidat další podmínku where, tak nárůst kodu by byl velký a vše vyjmenovávat je kontraproduktivní.
Otázečka zní, jak se toto řeší?
Hledal jsem inspiraci tuším že v o5/grido a měla by to býti tato fce:
protected function makeWhere(Condition $condition, \Nette\Database\Table\Selection $selection = NULL)
{
$selection = $selection === NULL
? $this->selection
: $selection;
if ($condition->callback) {
callback($condition->callback)->invokeArgs(array($condition->value, $selection));
} else {
call_user_func_array(array($selection, 'where'), $condition->__toArray());
}
}
Ovšem toto jsem vůbec nepochopil (Začátečník) :)
Díky za veškeré info.
- David Matějka
- Moderator | 6445
private function buildQuery() {
$selection = $this->db->findToTranslate();
if ($this->getToLanguage() != 0) {
$selection->where('to = ?', $this->getToLanguage());
}
if ($this->getFromLanguage() != 0) {
$selection->where('from = ?', $this->getFromLanguage());
}
return $selection;
}
- TheNEoo
- Člen | 75
matej21 napsal(a):
private function buildQuery() { $selection = $this->db->findToTranslate(); if ($this->getToLanguage() != 0) { $selection->where('to = ?', $this->getToLanguage()); } if ($this->getFromLanguage() != 0) { $selection->where('from = ?', $this->getFromLanguage()); } return $selection; }
Thx moc pěkné zjednodušení. Vůbec mě to takto nenapadlo.