Как распечатать запрос 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();
Принц Патель
источник
2

Или просто используйте

echo $collection->getSelect()
Хоа ТруонгДинь
источник
0

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

Симбу Арасан
источник
0

var_dump ($ галерею-> getSelect () -> __ ToString ());

Нам Хуат
источник