Como imprimir consulta mysql de coleção no magento 2?

15

getSelect()->__toString();está disponível em Magento 1 para consulta de impressão da coleção. como exemplo abaixo

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

Existe algum método disponível no magento 2? Eu encontrei isso, ->printLogQuery(true);mas não funciona para mim.

Atualização: abaixo está o código. Estou tentando obter produtos mais vendidos. seu trabalho perfeito, mas eu quero imprimir consulta para depuração.

$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
fonte
1
Por favor, poste o código completo que você está testando printLogQuerycom
Raphael em Digital pianismo
Obrigado @RaphaelatDigitalPianism pelo comentário rápido. Revisei a pergunta com código.
Kul
1
você pode tentar com $ this -> _ collection-> getSelect ();
Rakesh Jesadiya 28/03

Respostas:

37

As respostas acima estão corretas, mas algumas coleções montam apenas a seleção no _beforeLoad()método, em vez de inicializá-la no construtor. Isso significa que você obterá uma sequência vazia se tentar gerar a consulta SQL antes de carregar a coleção.

Um exemplo disso é \Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection. Portanto, se você estiver obtendo resultados inesperados, carregue a coleção (isso criará a consulta de seleção final) e, em seguida, produza a 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
fonte
11

Você pode usar o mesmo que o magento 1 para imprimir a consulta no 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
fonte
Perfeito. Eu não tenho o mesmo para M2. seu trabalho perfeito!
Kul
7

Você pode usar a função __toString () para imprimir consultas no Magento 2

$collection = "Your Query";

echo $collection->getSelect()->__toString();
Prince Patel
fonte
2

Ou simplesmente use

echo $collection->getSelect()
Khoa TruongDinh
fonte