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...
ในไฟล์ทวิกของคุณใช้ฟิลเตอร์ทวิกผู้ช่วย 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 }}
คำอธิบาย:
คำตอบอื่น ๆ ที่กล่าวถึงว่าคำสั่งที่เตรียมไว้นั้นเป็นจริง "คำค้นหาจริง" นั้นถูกต้อง แต่พวกเขาไม่ตอบสนองต่อความคาดหวังของผู้ถามที่ชัดเจน ... นักพัฒนาทุกคนต้องการแสดง "แบบสอบถามที่เรียกใช้" สำหรับการดีบัก .
ดังนั้นฉันจึงดูแหล่งที่มาของผู้สร้างโปรไฟล์ของ Symfony เพื่อดูว่าพวกเขาทำได้อย่างไร ส่วนหลักคำสอนเป็นความรับผิดชอบของหลักคำสอนดังนั้นพวกเขาจึงสร้างกลุ่มคำสอนเพื่อรวมเข้ากับ Symfony ต้องดูที่doctrine-bundle/Resources/views/Collector/db.html.twig
ไฟล์คุณจะพบวิธีการใช้งานไฟล์ (สิ่งนี้อาจเปลี่ยนแปลงในทุกเวอร์ชัน) ที่น่าสนใจพวกเขาสร้างตัวกรองกิ่งไม้ที่เราสามารถนำมาใช้ใหม่ (ดูด้านบน)
เพื่อให้ทุกอย่างใช้งานได้เราจำเป็นต้องเปิดใช้งานการบันทึกสำหรับการสืบค้นของเรา มีหลายวิธีในการทำสิ่งนี้และที่นี่ฉันใช้ DebugStack ซึ่งอนุญาตให้บันทึกการสืบค้นโดยไม่ต้องพิมพ์จริง สิ่งนี้จะช่วยให้แน่ใจว่าสิ่งนี้จะทำงานในโหมดการผลิตหากนี่คือสิ่งที่คุณต้องการ ...
หากคุณต้องการการจัดรูปแบบเพิ่มเติมคุณจะเห็นว่าพวกเขามี CSS บางอย่างในแท็กสไตล์ดังนั้นเพียง "ขโมย" มัน ^^:
.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; }
หวังว่านี่จะช่วย ;-)