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());
printLogQuery
conRespuestas:
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.fuente
Puede usar lo mismo que magento 1 para imprimir consultas en magento 2.
fuente
Puede usar la función __toString () para imprimir consultas en Magento 2
fuente
O simplemente use
fuente
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.
fuente