如何在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
拉斐尔在数码钢琴艺术

感谢@RaphaelatDigitalPianism快速评论。我用代码修改了问题。
库尔

1
您可以尝试$ this-> _ collection-> getSelect();
Rakesh Jesadiya

Answers:


37

上面的答案是正确的,但是某些集合仅在_beforeLoad()方法中组装select ,而不是在构造函数中对其进行初始化。这意味着如果您在加载集合之前尝试输出SQL查询,则会得到一个空字符串。

例如\Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection。因此,如果您得到意外的结果,请加载集合(这将构建最终的select查询),然后输出查询。

$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 1相同的名称来打印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();

完善。我对M2不太一样。它的工作完美!
库尔

8

您可以使用__toString()函数在Magento 2中打印查询

$collection = "Your Query";

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


1

我希望您要打印查询以识别getsize count错误的问题。每当您使用分组查询时,调用getSize函数意味着它将给出第一条记录数据,因此将给出错误的计数。为此,请先嵌入查询分组。您应该调用getSize函数。因此它将在执行分组查询之前设置。


1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.