Comment imprimer une requête mysql de collection dans magento 2?

15

Il est getSelect()->__toString();disponible dans Magento 1 pour la requête d'impression de la collection. comme l'exemple ci-dessous

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

Existe-t-il une méthode disponible dans magento 2? J'ai trouvé cela ->printLogQuery(true);mais ne fonctionne pas pour moi.

Mise à jour: ci-dessous est le code. J'essaie d'obtenir des produits à succès. son travail parfait mais je veux imprimer la requête de débogage.

$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
la source
1
S'il vous plaît poster le code complet que vous testez printLogQueryavec
Raphael chez Digital Pianism
Merci @RaphaelatDigitalPianism pour un commentaire rapide. J'ai révisé la question avec le code.
Kul
1
vous pouvez essayer avec $ this -> _ collection-> getSelect ();
Rakesh Jesadiya

Réponses:

37

Les réponses ci-dessus sont correctes, mais certaines collections assemblent uniquement la sélection dans la _beforeLoad()méthode, par opposition à l'initialisation dans le constructeur. Cela signifie que vous obtiendrez une chaîne vide si vous essayez de générer la requête SQL avant de charger la collection.

Un exemple de ceci est \Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection. Donc, si vous obtenez des résultats inattendus, chargez la collection (cela créera la requête de sélection finale), puis générez la requête.

$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
la source
11

Vous pouvez utiliser la même chose que magento 1 pour imprimer une requête dans 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
la source
Parfait. Je n'ai pas la même chose pour M2. son travail parfait!
Kul
7

Vous pouvez utiliser la fonction __toString () pour imprimer la requête dans Magento 2

$collection = "Your Query";

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

Ou utilisez simplement

echo $collection->getSelect()
Khoa TruongDinh
la source
0

J'espère que vous souhaitez imprimer la requête pour identifier le problème du nombre de tailles de get incorrect. chaque fois que vous utilisez le groupe par requête, alors appelez la fonction getSize signifie qu'elle donnera les premières données d'enregistrement donc elle donnera un nombre incorrect. pour cela avant d'incorporer le groupe par requête. vous devez appeler la fonction getSize. il sera donc défini avant d'exécuter le groupe par requête.

Simbu Arasan
la source
0

var_dump ($ collection-> getSelect () -> __ toString ());

Nam Khuat
la source