2013-05-02 14 views
17

प्रोपेल में क्वेरी ऑब्जेक्ट से कच्चे SQL कथन कैसे प्राप्त करूं? मुझे डीबगिंग उद्देश्यों के लिए इसकी आवश्यकता है।प्रस्ताव: क्वेरी ऑब्जेक्ट से कच्चे एसक्यूएल प्राप्त करें?

उदाहरण के लिए: मैं

$rawSql = new BookQuery::create()->filterById(25)->getRawSql(); 

में के रूप में कुछ इस तरह मौजूद है एक समारोह है चाहते हैं?

उत्तर

19

हां; आप Criteria माता पिता वर्ग से toString विधि के बाद कर रहे हैं:

$rawSql = (new BookQuery)::create()->filterById(25)->toString(); 

@jakerella कहते हैं, आप को छानने के लिए उपयोग विशिष्ट मान डेटाबेस इंजन द्वारा, बल्कि प्रोपेल से बाध्य होंगे, और इसलिए आप देखेंगे क्वेरी की संरचना लेकिन वास्तव में निष्पादित नहीं की जाएगी। यदि आप इसे देखना चाहते हैं, तो यदि आप सक्षम हैं, तो आप अपने डेटाबेस क्वेरी लॉग देख सकते हैं।

+2

तो सरल ... :) – twigmac

+2

ध्यान दें कि आप ऊपर क्वेरी में विशिष्ट 'select' कॉलम नहीं मिलेगा - प्रोपेल करता है कि सही खोजने से पहले । इस प्रकार आपको कुछ ऐसा दिखना चाहिए: 'पुस्तक से चुनें जहां आईडी =: पी 1; ...: पी 1 => 25' – jakerella

+0

@ जेकेरेला: क्या आप उस पर विस्तार कर सकते हैं? मुझे यकीन नहीं है कि यह स्पष्ट करता है कि आप जो सुझाव दे रहे हैं उसे कैसे करें। – halfer

8

पूरा जवाब स्वीकार किए जाते हैं, आप अगले कोड बाद में क्वेरी निष्पादन का उपयोग कर सकते हैं।

\Propel::getConnection()->getLastExecutedQuery() // Returns fully qualified SQL 

यह आप पूरी क्वेरी (चयन कॉलम और प्राप्त किए गए मापदंडों सहित) जो डेटाबेस के लिए भेजा गया था देखने के लिए अनुमति देता है।


युपीडी: (रूप ने उल्लेख किया @bbird)

यह आदेश नहीं होगा उत्पादन कुछ भी जब तक useDebugtrue है:

\Propel::getConnection()->useDebug(true); 

UPD2: (अगर आप सिम्फोनी ढांचा उपयोग कर रहे हैं) का उल्लेख

एक और बात के लायक PropelORM + Symfony है।

यदि आपको एसक्यूएल का पता लगाने की आवश्यकता है तो लॉग का उपयोग करना संभव है। प्रोपेल के पास monolog चैनल है जिसे propel कहा जाता है और प्रासंगिक चैनल (propel.DEBUG) पर DEBUG लॉग स्तर के साथ पूरी तरह से योग्य प्रश्न लॉग किए गए हैं।

प्रवेश करें/क्वेरी रिकॉर्ड इस तरह दिखता है:

[2016-10-04 17:00:46] propel.DEBUG: time: 0.000 sec | mem: 24.8 MB | connection: default | SELECT `id`, `username`, `email`, `last_login` FROM `users` WHERE `id` = 123 [] [] 
+1

बहुत ही आशाजनक सुझाव! मैं इसे आजमाने की उम्मीद कर रहा हूं। – twigmac

+2

नोट करें कि यह आदेश तब तक आउटपुट नहीं करेगा जब तक कि डीबग सत्य न हो: $ con = Propel :: getConnection(); $ चुनाव> useDebug (सही); $ चुनाव> getLastExecutedQuery(); – bbird

संबंधित मुद्दे