TL; DR
$qb = ... // your query builder
$query = $qb->getQuery();
// temporarily enable logging for your query (will also work in prod env)
$conf = $query->getEntityManager()->getConnection()->getConfiguration();
$backupLogger = $conf->getSQLLogger();
$logger = new \Doctrine\DBAL\Logging\DebugStack();
$conf->setSQLLogger($logger);
// execute query
$res = $query->getResult();
$conf->setSQLLogger($backupLogger); //restore logger for other queries
$params = [
'query' => array_pop($logger->queries) //extract query log details
//your other twig params here...
]
return $params; //send this to your twig template...
dalam file ranting Anda, gunakan filter pembantu ranting Doctrine:
// show raw query:
{{ (query.sql ~ ';')|doctrine_replace_query_parameters(query.params)
// highlighted
{{ (query.sql ~ ';')|doctrine_replace_query_parameters(query.params)|doctrine_pretty_query(highlight_only = true) }}
// highlighted and formatted (i.e. with tabs and newlines)
{{ (query.sql ~ ';')|doctrine_replace_query_parameters(query.params)|doctrine_pretty_query }}
Penjelasan:
Jawaban lain yang menyebutkan bahwa pernyataan Disiapkan sebenarnya "permintaan nyata" benar, tetapi mereka tidak menjawab harapan penanya yang jelas ... Setiap pengembang ingin menampilkan "kueri runnable" untuk debugging (atau untuk menampilkannya kepada pengguna) .
Jadi, saya melihat ke sumber profiler Symfony untuk melihat bagaimana mereka melakukannya. Bagian Doktrin adalah tanggung jawab Doktrin sehingga mereka membuat kumpulan doktrin untuk diintegrasikan dengan Symfony. Setelah melihat doctrine-bundle/Resources/views/Collector/db.html.twig
file tersebut, Anda akan mengetahui bagaimana mereka melakukannya (ini dapat berubah antar versi). Menariknya, mereka membuat filter ranting yang dapat kita gunakan kembali (lihat di atas).
Agar semuanya berfungsi, kita perlu mengaktifkan Logging untuk permintaan kita. Ada beberapa cara untuk melakukan ini dan di sini saya menggunakan DebugStack yang memungkinkan untuk mencatat permintaan tanpa benar-benar mencetaknya. Ini juga memastikan bahwa ini akan berfungsi dalam mode produksi jika ini yang Anda butuhkan ...
Jika Anda membutuhkan pemformatan lebih lanjut, Anda akan melihat bahwa mereka menyertakan beberapa CSS dalam tag gaya, jadi cukup "curi" itu ^^:
.highlight pre { margin: 0; white-space: pre-wrap; }
.highlight .keyword { color: #8959A8; font-weight: bold; }
.highlight .word { color: #222222; }
.highlight .variable { color: #916319; }
.highlight .symbol { color: #222222; }
.highlight .comment { color: #999999; }
.highlight .backtick { color: #718C00; }
.highlight .string { color: #718C00; }
.highlight .number { color: #F5871F; font-weight: bold; }
.highlight .error { color: #C82829; }
Semoga, ini akan membantu ;-)