magento 2でコレクションmysqlクエリを印刷するにはどうすればよいですか?


15

そこではgetSelect()->__toString();、コレクションの印刷クエリのMagentoの1で利用可能です。以下の例のように

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

magento 2で利用可能な方法はありますか?これを見つけました->printLogQuery(true);が、うまくいきません。

更新:以下はコードです。ベストセラー製品を入手しようとしています。その作業は完璧ですが、デバッグ用のクエリを出力したいです。

$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
あなたがテストしている完全なコード投稿してくださいprintLogQuery
デジタルPianismでラファエル

迅速なコメントをありがとう@RaphaelatDigitalPianism 私はコードで質問を修正しました。
クル

1
$ this-> _ collection-> getSelect();で試すことができます。
ラケシュジェサディヤ

回答:


37

上記の答えは正しいですが、一部のコレクション_beforeLoad()は、コンストラクターで選択を初期化するのではなく、メソッドで選択を組み立てるだけです。つまり、コレクションをロードする前にSQLクエリを出力しようとすると、空の文字列が取得されます。

この例はです\Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection。したがって、予期しない結果が得られる場合は、コレクションをロードして(これにより最終的な選択クエリが構築されます)、クエリを出力します。

$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

magento 2でクエリを印刷するには、magento 1と同じものを使用できます。

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

パーフェクト。M2でも同じではありません。その仕事は完璧です!
クール

7

あなたは使用することができます__toString() Magentoの中でクエリを印刷する機能を2

$collection = "Your Query";

echo $collection->getSelect()->__toString();

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.