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)