¿Cómo imprimir la colección mysql query en magento 2?

15

Hay getSelect()->__toString();disponible en Magento 1 para imprimir consulta de colección. como el siguiente ejemplo

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

¿Hay algún método disponible en magento 2? He encontrado esto ->printLogQuery(true);pero no funciona para mí.

Actualización: a continuación se muestra el código. Estoy tratando de obtener productos más vendidos. funciona perfecto pero quiero imprimir la consulta para depurar.

$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
fuente
1
Por favor enviar el código completo que está probando printLogQuerycon
Raphael en Digital pianismo
Gracias @RaphaelatDigitalPianism por comentarios rápidos. He revisado la pregunta con el código.
Kul
1
puedes probar con $ this -> _ collection-> getSelect ();
Rakesh Jesadiya

Respuestas:

37

Las respuestas anteriores son correctas, pero algunas colecciones solo ensamblan la selección en el _beforeLoad()método, en lugar de inicializarla en el constructor. Esto significa que obtendrá una cadena vacía si intenta generar la consulta SQL antes de cargar la colección.

Un ejemplo de esto es \Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection. Entonces, si obtiene resultados inesperados, cargue la colección (esto generará la consulta de selección final) y luego envíe la consulta.

$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
fuente
11

Puede usar lo mismo que magento 1 para imprimir consultas en 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();
Rakesh Jesadiya
fuente
Perfecto. No tengo lo mismo para M2. su trabajo perfecto!
Kul
7

Puede usar la función __toString () para imprimir consultas en Magento 2

$collection = "Your Query";

echo $collection->getSelect()->__toString();
Príncipe Patel
fuente
2

O simplemente use

echo $collection->getSelect()
Khoa TruongDinh
fuente
0

Espero que desee imprimir la consulta para identificar el problema de la cuenta de tamaño incorrecto. cada vez que use group by query, llame a la función getSize, lo que significa que dará los primeros datos de registro, por lo que dará un recuento incorrecto. para esto antes de incrustar grupo por consulta. deberías llamar a la función getSize. por lo que se establecerá antes de ejecutar el grupo por consulta.

Simbu Arasan
fuente