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

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

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

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


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.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.