Magento 2에서 컬렉션 MySQL 쿼리를 인쇄하는 방법은 무엇입니까?


15

이는 getSelect()->__toString();수집의 인쇄 쿼리에 대한 젠토 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. 코드로 질문을 수정했습니다.
Kul

1
$ this-> _ collection-> getSelect ()로 시도해보십시오.
Rakesh Jesadiya

답변:


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 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와 같지 않았다. 그 작품은 완벽합니다!
Kul

7

Magento 2에서 __toString () 함수를 사용 하여 쿼리를 인쇄 할 수 있습니다.

$collection = "Your Query";

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


0

getsize count 문제를 식별하기 위해 쿼리를 인쇄하고 싶습니다. query by group을 사용할 때마다 getSize 함수를 호출하면 첫 번째 레코드 데이터를 제공하므로 잘못된 수를 제공합니다. 이를 위해 쿼리를 통해 그룹을 임베드하기 전에. getSize 함수를 호출해야합니다. 따라서 쿼리별로 그룹을 실행하기 전에 설정됩니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.