टी एल; डॉ
$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 }}
स्पष्टीकरण:
अन्य उत्तर जो उल्लेख करते हैं कि तैयार कथन वास्तव में "वास्तविक प्रश्न" सही हैं, लेकिन वे स्पष्ट प्रश्नकर्ता की अपेक्षा का जवाब नहीं देते हैं ... प्रत्येक डेवलपर डिबगिंग के लिए "रन करने योग्य क्वेरी" प्रदर्शित करना चाहता है (या इसे उपयोगकर्ता को प्रदर्शित करना चाहता है) ।
इसलिए, मैंने सिम्फनी प्रोफाइलर के स्रोत में देखा कि वे इसे कैसे करते हैं। डॉक्ट्रिन भाग डॉक्ट्रिन की जिम्मेदारी है इसलिए उन्होंने सिम्फनी के साथ एकीकरण करने के लिए एक सिद्धांत-बंडल बनाया। doctrine-bundle/Resources/views/Collector/db.html.twig
फ़ाइल को देखने के बाद , आपको पता चलेगा कि वे इसे कैसे करते हैं (यह संस्करणों में बदल सकता है)। दिलचस्प बात यह है कि उन्होंने ट्विग फिल्टर्स बनाए हैं जिनका हम पुनः उपयोग कर सकते हैं (ऊपर देखें)।
सब कुछ काम करने के लिए हमें अपनी क्वेरी के लिए लॉगिंग सक्षम करने की आवश्यकता है। ऐसा करने के कई तरीके हैं और यहां मैं डिबगस्टैक का उपयोग करता हूं जो प्रश्नों को वास्तव में प्रिंट किए बिना लॉग इन करने की अनुमति देता है। यह भी सुनिश्चित करता है कि यह उत्पादन मोड में काम करेगा यदि आपको यही चाहिए ...
यदि आपको आगे प्रारूपण की आवश्यकता है, तो आप देखेंगे कि वे एक स्टाइल टैग में कुछ सीएसएस शामिल करते हैं, इसलिए बस इसे "चोरी" करें ^ ^:
.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; }
आशा है, यह मदद मिलेगी ;-)