Přepsání SQL dotazu do syntaxe nette

- xciza
 - Člen | 194
 
Hoj, začínám projekt propojovat s databází a nevím si rady
s některými dotazy nad db.
V čistém php mám dotaz:
$jidla = mysql_query("SELECT * FROM polozka WHERE ID_Kategorie BETWEEN 1 AND 17 ORDER BY ID_kategorie, nazev", $dbc)or die("Chyba v dotaze: " . mysql_error());
ale teď bych ho potřeboval převést do podoby, kterou používá nette. Zatím mám toto:
public function renderDefault() {
        $this->template->polozka = $this->context->createPolozka()
                ->order('ID_kategorie ASC');
    }
ale nevím jak do toho zakomponovat to between 1 and 17??
Prosím o radu, jak na to?

- zatomik
 - Člen | 19
 
Myslím, že Nette databáze žádnou metodu pro between nemá. Pokud se nepletu, tak stejný účinek by měl dotaz:
WHERE id_kategorie > 1 AND id_kategorie < 17
A to již lze udělat pomocí této metody: viz https://doc.nette.org/cs/database
$table->where("field > ?", $val)
				
- zatomik
 - Člen | 19
 
Ten tvůj kód by pak vypadal takto:
public function renderDefault() {
        $this->template->polozka = $this->context->createPolozka()
                ->order('ID_kategorie ASC')->where("ID_kategorie > ?", 1)->where("ID_kategorie < ?", 17);
    }
Ovšem moc nerozumím tomu $this->context->createPolozka(), spíše by jsi měl volat ty metody nad databází:
public function renderDefault() {
        $this->template->polozky= $this->database
                ->order('ID_kategorie ASC')->where("ID_kategorie > ?", 1)->where("ID_kategorie < ?", 17);
    }
Pokud nevíš, kde získat $this->database, tak se mrkni sem: https://doc.nette.org/cs/database (hned nahoře)
A potom někde v šabloně:
{foreach $polozky as $polozka}
neco...
{/foreach}
				
- Ot@s
 - Backer | 476
 
Podrobněji to najdeš právě v té dokumentaci…
Za předpokladu, že $this->context->createPolozka() vrací
Nette\Database\Table\Selection, platí níže uvedené:
$val1 = 10; $val2 = 1000;
$this->template->polozka = $this->context->createPolozka()->where("ID_kategorie > ? AND ID_kategorie < ?", $val1, $val2)->order('ID_kategorie ASC');
				
- Melmen
 - Člen | 132
 
Možná něco takovýho? S Nette\Database nedělám, ale mělo by to jít :)
public function renderDefault() {
        $this->template->polozka = $this->context->createPolozka()
		->where('ID_kategorie > 1')
		->where('ID_kategorie < 1')
                ->order('ID_kategorie ASC');
    }
Možná spíš
->where('ID_kategorie > ?', 1)->where('ID_kategorie < ?', 17)
:)
//EDIT byl jsem moc pomalej :D
Editoval Melmen (16. 3. 2012 13:37)