Ukládání DB dotazů do souboru

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

Ahoj, potřeboval bych ukládat do souboru všechny DB dotazy Nevíte jak na to? Našel jsem si tu na foru návod, ale pro nette 2.2. nefunguje. Díky

David Matějka
Moderator | 6445
+
+1
-

napoj se na onQuery event, stejne jako to dela database panel do tracy https://api.nette.org/…nel.php.html#…

n.u.r.v.
Člen | 485
+
0
-

Mno tak nějak jsem to zkoušel, ale asi blbě:

Udělal jsem si LogRepository.php
v config.neon jsem dal do services:- Model\LogRepository(Nette\Database\Connection(@nette.database.moje_database))

v LogRepository.php jsem měl:

namespace Model;

use Nette\Database\Connection;
use Nette;

class LogRepository extends Nette\Object {

    private $db;

    public function __construct(Nette\Database\Connection $database) {
        $database->onQuery[] = array($this, 'logQuery');
    }

    public function logQuery(Nette\Database\Connection $connection, $result) {
        $soubor = fopen("Cesta/k/souboru/queryLog.txt", "a");
        fwrite($soubor, $result->getQueryString() . "\r\n" . '=====' . "\r\n");
        fclose($soubor);
    }

}

a do Base presenteru jsem dal:

protected $logRepository;

public function injectLogRepository(\Model\LogRepository $log) {
        $this->logRepository = $log;
    }

Ale bohužel to nic nedělalo (ani metoda logQuery se nespustila). Co mě chybí/kde jsem to zvrtal?Díky

David Kudera
Člen | 455
+
0
-

Teoreticky by mělo stačit dát té službě tag run a nemělo by být potřeba ji dávat ani do presenteru. Tím se spustí „sama“ hned na začátku

services:
	-
		class: Model\LogRepository
		tags: [run]

Ale když to nejde ani přes presenter, tak bude asi problém někde jinde

Editoval David Kudera (16. 7. 2014 12:48)

n.u.r.v.
Člen | 485
+
0
-

No, když to udělám tak jak jsem výše napsal, tak dostanu tuto chybu: PDO::__construct() expects parameter 1 to be string, object given

v souboru File: …\vendor\nette\database\src\Database\Connection.php:66

David Matějka
Moderator | 6445
+
0
-

to

- Model\LogRepository(Nette\Database\Connection(@nette.database.moje_database))

je hloupost. Bud tam nepredavej zadnej parametr, at se to autowiruje, nebo predej tu databazi

- Model\LogRepository(@nette.database.moje_database)
n.u.r.v.
Člen | 485
+
0
-

díky -tot funguje:

- Model\LogRepository(@nette.database.moje_database)