Magento 2 में संग्रह mysql क्वेरी कैसे प्रिंट करें?


15

नहीं है getSelect()->__toString();संग्रह के प्रिंट क्वेरी के लिए Magento 1 में उपलब्ध है। उदाहरण के नीचे

$products = Mage::getModel(‘catalog/product’)
 ->addAttributeToFilter(‘status’, array(‘eq => 1));
echo $products->getSelect()->__toString();

क्या Magento 2 में कोई विधि उपलब्ध है? मैंने यह पाया है ->printLogQuery(true);लेकिन मेरे लिए काम नहीं करता है।

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

$this->_collection->getSelect()
                  ->joinLeft(
                'sales_order_item',
                'e.entity_id = sales_order_item.product_id',
                array('qty_ordered'=>'SUM(sales_order_item.qty_ordered)')) 
                ->group('e.entity_id') 
                ->order('qty_ordered '.$this->getCurrentDirectionReverse());

1
पूर्ण कोड आप परीक्षण कर रहे हैं कृपया पोस्ट printLogQueryके साथ
डिजिटल Pianism में राफेल

त्वरित टिप्पणी के लिए @RaphaelatDigitalPianism धन्यवाद। मेरे पास कोड के साथ संशोधित प्रश्न है।
कुल

1
आप इस $ के साथ कोशिश कर सकते हैं -> _ संग्रह-> getSelect ();
राकेश जेसादिया

जवाबों:


37

उपरोक्त उत्तर सही हैं, लेकिन कुछ संग्रह केवल _beforeLoad()विधि में चयन को इकट्ठा करते हैं , जैसा कि निर्माणकर्ता में इसे शुरू करने के विपरीत है। इसका मतलब है कि यदि आप संग्रह को लोड करने से पहले SQL क्वेरी को आउटपुट करने का प्रयास करते हैं तो आपको एक खाली स्ट्रिंग मिलेगी।

इसका एक उदाहरण है \Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection। इसलिए यदि आपको अप्रत्याशित परिणाम मिल रहे हैं तो संग्रह को लोड करें (यह अंतिम चयन क्वेरी का निर्माण करेगा) और फिर क्वेरी को आउटपुट करें।

$collection->load();

// the following statements are equivalent
$collection->getSelect()->assemble();
$collection->getSelect()->__toString();
echo $collection->getSelect(); // will call magic method __toString() behind the scenes which in turn calls assemble()

11

आप magento 2 में क्वेरी को प्रिंट करने के लिए magento 1 के समान उपयोग कर सकते हैं।

$collection = $this->_collection->getSelect()
                      ->joinLeft(
                    'sales_order_item',
                    'e.entity_id = sales_order_item.product_id',
                    array('qty_ordered'=>'SUM(sales_order_item.qty_ordered)')) 
                    ->group('e.entity_id') 
                    ->order('qty_ordered '.$this->getCurrentDirectionReverse());

$collection->getSelect()->__toString();

उत्तम। मैंने M2 के लिए समान नहीं किया है। इसका काम एकदम सही है!
कुल

8

आप Magento 2 में क्वेरी प्रिंट करने के लिए __toString () फ़ंक्शन का उपयोग कर सकते हैं

$collection = "Your Query";

echo $collection->getSelect()->__toString();


1

मुझे आशा है कि आप गलत गणना के मुद्दे की पहचान करने के लिए क्वेरी प्रिंट करना चाहते हैं। जब भी आप क्वेरी द्वारा समूह का उपयोग करते हैं तो getSize फ़ंक्शन को कॉल करें इसका अर्थ है कि यह पहले रिकॉर्ड डेटा देगा, इसलिए यह गलत गणना देगा। क्वेरी द्वारा एम्बेड समूह से पहले इसके लिए। आपको getSize फ़ंक्शन को कॉल करना चाहिए। इसलिए यह क्वेरी द्वारा समूह निष्पादित करने से पहले सेट हो जाएगा।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.