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...
dal dosyalarınızda Doctrine'in dal yardımcıları filtrelerini kullanın:
// 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 }}
Açıklama:
Hazırlanan ifadenin aslında "gerçek sorgular" olduğunu belirten diğer yanıtlar doğrudur, ancak bariz sorucunun beklentilerini yanıtlamazlar ... Her geliştirici, hata ayıklama için (veya kullanıcıya görüntülemek için "çalıştırılabilir bir sorgu" görüntülemek istiyor) .
Böylece, nasıl yaptıklarını görmek için Symfony profiler kaynağına baktım. Doktrin kısmı Doktrinin sorumluluğudur, bu yüzden Symfony ile entegrasyon için bir doktrin paketi hazırladılar. doctrine-bundle/Resources/views/Collector/db.html.twig
Dosyaya baktığınızda, nasıl yaptıklarını öğreneceksiniz (bu, sürümler arasında değişebilir). İlginç bir şekilde, tekrar kullanabileceğimiz dal filtreleri oluşturdular (yukarıya bakın).
Her şeyin çalışması için sorgumuz için Günlüğe Kaydetmeyi etkinleştirmeliyiz. Bunu yapmanın birden çok yolu vardır ve burada sorguları gerçekten yazdırmadan günlüğe kaydetmeye izin veren DebugStack kullanıyorum. Bu, ihtiyacınız olan şeyse bunun üretim modunda çalışmasını da sağlar ...
Daha fazla biçimlendirmeye ihtiyacınız varsa, bir stil etiketine bazı CSS eklediklerini göreceksiniz, bu yüzden basitçe "çalın" ^^:
.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; }
Umarım bu yardımcı olacaktır ;-)