Как распечатать запрос MySQL в magento 2?


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с
Рафаэль в Digital пианизма

Спасибо @RaphaelatDigitalPianism за быстрый комментарий. У меня есть пересмотреть вопрос с кодом.
Куль

1
вы можете попробовать с помощью $ this -> _ collection-> getSelect ();
Ракеш Джесадия

Ответы:


37

Ответы выше верны, но некоторые коллекции только собирают select в _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. его работа идеально!
Куль

7

Вы можете использовать функцию __toString () для печати запроса в Magento 2

$collection = "Your Query";

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


0

Я надеюсь, что вы хотите напечатать запрос, чтобы определить проблему неправильного подсчета getize. всякий раз, когда вы используете группирование по запросу, вызывайте функцию getSize, что означает, что она выдаст данные первой записи, поэтому будет давать неправильный счет. для этого, прежде чем вставлять группу по запросу. Вы должны вызвать функцию getSize. поэтому он будет установлен перед выполнением групп по запросу.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.