Nette\Database getSql při UPDATE

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
czmickey
Člen | 2
+
0
-

Ahoj, zjistil jsem, že když chci vypsat SQL dotaz, abych viděl, jak vypadá, stačí přidat do skládání dotazu funkci getSql(), ale když si chci vypsat obsah UPDATE dotazu, tak mi to skončí chybou:

Call to a member function getSql() on a non-object

Kód:

Nette\Diagnostics\Debugger::barDump($this->db->table("tabulka")->update($update_data)->getSql());

Má to tak být nebo mam někde chybu? Zkusil jsem i aktualizovat na nejnovější verzi nette (měl jsem 2.0.7) a nepomohlo to. Nebo je nějaký jiný způsob jak zjistit, jaký SQL příkaz se bude provádět? Ideálně i s doplněnýma hodnotama (ve where podmínkách jsou jen otazníky).

redhead
Člen | 1313
+
0
-

Metoda update() vykonává okamžitě operaci update a vrací počet změněných řádků (jak se lze dočíst v dokumentaci), proto nemůže getSql() fungovat. U dotazování přes selection API je to trochu jinak.

Výsledné SQL se můžeš dozvědět z Laděnky (debug bar), operace se tam logují defaultně. Nebo si můžeš registrovat callback onQuery v Connection.

Editoval redhead (25. 8. 2013 22:17)

czmickey
Člen | 2
+
0
-

redhead napsal(a):

Metoda update() vykonává okamžitě operaci update a vrací počet změněných řádků (jak se lze dočíst v dokumentaci), proto nemůže getSql() fungovat. U dotazování přes selection API je to trochu jinak.

Výsledné SQL se můžeš dozvědět z Laděnky (debug bar), operace se tam logují defaultně. Nebo si můžeš registrovat callback onQuery v Connection.

Děkuju za odpověď. Debug bar sice dotazy zaznamenává, ale až po úspěšném provedení. A pokud nastane chyba, tak laděnka vyhodí jen část dotazu a pak se hodí, když znám přesně ten dotaz, kterej se má provést.