Wie drucke ich eine Sammlung von MySQL-Abfragen in Magento 2?

15

Es gibt getSelect()->__toString();in Magento 1 für den Druck Abfrage von Sammlung zur Verfügung. wie im folgenden Beispiel

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

Gibt es eine Methode in Magento 2? Ich habe das gefunden, ->printLogQuery(true);aber es funktioniert nicht für mich.

Update: Unten ist der Code. Ich versuche Bestsellerprodukte zu bekommen. seine Arbeit perfekt, aber ich möchte die Abfrage für das Debuggen drucken.

$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());
Kul
quelle
1
Bitte senden Sie den vollständigen Code Sie testen printLogQuerymit
Raphael bei Digital Pianism
Vielen Dank an @RaphaelatDigitalPianism für den schnellen Kommentar. Ich habe Frage mit Code überarbeitet.
Kul
1
Sie können es mit $ this -> _ collection-> getSelect () versuchen.
Rakesh Jesadiya

Antworten:

37

Die obigen Antworten sind korrekt, aber einige Auflistungen stellen nur die Auswahl in der _beforeLoad()Methode zusammen, anstatt sie im Konstruktor zu initialisieren. Dies bedeutet, dass Sie eine leere Zeichenfolge erhalten, wenn Sie versuchen, die SQL-Abfrage auszugeben, bevor Sie die Auflistung laden.

Ein Beispiel dafür ist \Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection. Wenn Sie also unerwartete Ergebnisse erhalten, laden Sie die Sammlung (dies erstellt die endgültige Auswahlabfrage) und geben Sie die Abfrage aus.

$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()
Andrei
quelle
11

Sie können dieselbe Funktion wie Magento 1 verwenden, um Abfragen in Magento 2 zu drucken.

$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();
Rakesh Jesadiya
quelle
Perfekt. Ich habe nicht das gleiche für M2. seine Arbeit perfekt!
Kul
7

Sie können die Funktion __toString () verwenden, um eine Abfrage in Magento 2 zu drucken

$collection = "Your Query";

echo $collection->getSelect()->__toString();
Prinz Patel
quelle
2

Oder verwenden Sie einfach

echo $collection->getSelect()
Khoa TruongDinh
quelle