Uprava sql nez se provede

H0w4rd
Člen | 96
+
0
-

Je mozne odchytit sql prikaz, ktery se bude posilat do databaze a upravit ho, nez se odesle?

Vim, ze existuje onQuery[], ve kterem muzu ziskat sql a parametry, to znam a pouzivam. Ale potreboval bych ten dotaz nejen vypsat, ale i upravit. Pouzivam Nette database.

Jak na to?

Kamil Valenta
Člen | 820
+
0
-

Můžeš si podědit Database\Context (nebo jeho obdobu v Nette 3) a přepsat si query().
Kdysi jsem to použil, abych si mohl přidávat před názvy tabulek prefixy.

H0w4rd
Člen | 96
+
0
-

Díky, vyzkoušel jsem si přepsat funkci query(), takže to takhle lze.

Jenom je problém, že bych musel najít všechny výskyty \Nette\Database\Context a nahradit to za mou odděděnou třídu.

Je nějaký způsob, jak vnutit moji třídu místo \Nette\Database\Context? Nebo prostě jakýkoliv způsob, aby v kódu mohlo zůstat \Nette\Database\Context a programátoři nemuseli myslet na to, že musí použít odděděnou třídu?

mystik
Člen | 312
+
+2
-

Stačí předefinovat jaká instance se vytváří v DI containeru. Pokud používáš standardní Nette setup tak:

services:
    database.default.context:
      create: \My\Database\Context

Nově se Context přejmenoval na Explorer takže pokud jedeš jen na novějších verzích tak spíš:

services:
    database.default.explorer:
      create: \My\Database\Explorer

Ale první verze funguje na nových verzích taky – přes alias. Takže je lepší pokud potřebuješ držet BC.

Editoval mystik (22. 9. 2022 11:26)