Nette Database a Listener?

lukasnov
Člen | 12
+
0
-

Ahoj, chtěl bych udělat Listener při update/insertu přes Nette Database. Umím napojit na eventy onChange atd. což v případě Database není. Neřešil to tady někdo? Popřípadě nějaký hint pokud je to teda vůbec udělat jde.

Kaczmi
Člen | 8
+
+2
-

Ahoj,
v Nette\Database\Connection je událost onQuery, která v druhém parametru předává buď PDOException nebo ResultSet.
ResultSet má funkci getQueryString(), pomocí nějakého regex výrazu můžeš vyhodnotit, jestli je dotaz Insert/Update.

Inspirací může být třeba ConnectionPanel v Tracy
https://github.com/…ionPanel.php#L72

lukasnov
Člen | 12
+
0
-

Kaczmi napsal(a):

Ahoj,
v Nette\Database\Connection je událost onQuery, která v druhém parametru předává buď PDOException nebo ResultSet.
ResultSet má funkci getQueryString(), pomocí nějakého regex výrazu můžeš vyhodnotit, jestli je dotaz Insert/Update.

Inspirací může být třeba ConnectionPanel v Tracy
https://github.com/…ionPanel.php#L72

díky za tip. Bohužel asi to musím stejně vymyslet jinak, protože si nemohu dovolit kontrolovat každé query. Ale třeba v jiném projektu to půjde, takže stejně děkuju :)

CZechBoY
Člen | 3608
+
0
-

Proc si to nemuzes dovolit?

lukasnov
Člen | 12
+
0
-

CZechBoY napsal(a):

Proc si to nemuzes dovolit?

Myslím, že kvůli náročnosti. Listener je potřeba pouze do admin modulu a zbytečně by to zpomalovolo front, kde se bohužel na 1 request dělá cca 200 queries – což asi není úplně správně, ale tak to je. A každý kontrolovat přes regex když vím, že na 100% to není insert/update, je zbytečné. Asi budu ukládát data pouze přes managera a odchytávat to tam.

David Grudl
Nette Core | 8227
+
+2
-

Vykonání i triviálního databázového dotazu trvá určitě déle než tisíce jednoduchých regexů.