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
+
0
-

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
+
0
-
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
+
0
-

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.