Jak v NDB zapsat ORDER BY FIELD pomocí SqlLiteral?
- enumag
- Člen | 2118
Potřeboval bych pomocí v NDB Selection (Nette 2.1) zapsat takovouto ORDER klauzuli. Zřejmě by to mělo jít pomocí SqlLiteral, ale nedaří se mi to. Jak na to?
Zkouším to přes SqlLiteral s parametry, ale Nette mi pokaždé vyhodí výjimku „There are more placeholders than passed parameters.“ (což je imho bug protože ve stringu je 1 otazník a jako parametry předávám jednoprvkové pole).
->order(new \Nette\Database\SqlLiteral('FIELD(id, ?)', array($ids)))
Editoval enumag (3. 3. 2014 22:41)
- David Matějka
- Moderator | 6445
order podporuje parametry primo, takze staci
->order('FIELD(id, ?)', $ids)
Editoval matej21 (3. 3. 2014 22:46)
- David Matějka
- Moderator | 6445
@enumag: ty parametry pro sql literal fungujou dobre, jen nejsou podporovany vsude :)
imho by to spis melo vyhodit InvalidArgumentException na mistech, kde to neni podporovany. coz jsou prave v selection where, select, order… jelikoz z nich se vytvori vysledny SQL a sql literal se prevede na string a ztrateji se tak parametry.
ale sql literal by melo byt funkcni jako parametry do techto fci, jako
->where('id = ?', new SqlLiteral('XXX(?)',1));
- David Matějka
- Moderator | 6445
sam nevim :) asi v parametrech where, order apod. (ale v tom nevidim moc
vyznam), ale hlavne je to uzitecny treba pro ->update()
->update(array(
'hits' => new SqlLiteral('hits + ?', array(1)),
));