Come stampare la query mysql della raccolta in magento 2?


15

È getSelect()->__toString();disponibile in Magento 1 per la query di stampa della raccolta. come sotto esempio

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

Esiste un metodo disponibile in Magento 2? L'ho trovato ->printLogQuery(true);ma non funziona per me.

Aggiornamento: sotto è il codice. Sto cercando di ottenere prodotti più venduti. funziona perfettamente ma voglio stampare una query per il debug.

$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
Si prega di inviare il codice completo che si sta testando printLogQuerycon
Raphael a Digital Pianism

Grazie @RaphaelatDigitalPianism per un rapido commento. Ho rivisto la domanda con il codice.
Kul

1
puoi provare con $ this -> _ collection-> getSelect ();
Rakesh Jesadiya,

Risposte:


37

Le risposte sopra sono corrette, ma alcune raccolte assemblano solo la selezione nel _beforeLoad()metodo, anziché inizializzarla nel costruttore. Ciò significa che otterrai una stringa vuota se provi a generare la query SQL prima di caricare la raccolta.

Un esempio di questo è \Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection. Quindi, se stai ottenendo risultati imprevisti, carica la raccolta (in questo modo verrà creata la query di selezione finale) e quindi l'output della query.

$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

Puoi usare lo stesso di magento 1 per stampare query in magento 2.

$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();

Perfetto. Non ho lo stesso per M2. il suo lavoro è perfetto!
Kul

7

Puoi usare la funzione __toString () per stampare query in Magento 2

$collection = "Your Query";

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.