Як надрукувати запит на колекцію mysql в magento 2?


15

Є getSelect()->__toString();в Magento 1 для друку запит колекції. як приклад нижче

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

Чи існує якийсь метод у магенто 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

Наведені вище відповіді правильні, але деякі колекції збирають лише вибраний у _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. його робота ідеальна!
Кул

8

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

$collection = "Your Query";

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


1

Я сподіваюся, що ви хочете надрукувати запит, щоб визначити помилку підрахунку getize неправильно. щоразу, коли ви використовуєте групу за запитом, тоді виклик getSize означає, що він дасть дані першого запису, тому він дасть неправильний підрахунок. для цього перед вставкою групи за запитом. вам слід викликати функцію getSize. тому вона буде встановлена ​​перед виконанням групи за запитом.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.