Jak wydrukować kwerendę mysql kolekcji w Magento 2?


15

Jest getSelect()->__toString();dostępny w Magento 1 do wydruku kwerendy kolekcji. jak poniżej przykład

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

Czy w Magento 2 jest dostępna metoda? Znalazłem to, ->printLogQuery(true);ale nie działa dla mnie.

Aktualizacja: poniżej znajduje się kod. Staram się uzyskać produkty bestsellerów. działa idealnie, ale chcę wydrukować zapytanie do debugowania.

$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
Proszę zamieścić pełny kod, printLogQueryz którym
testujesz

Dzięki @RaphaelatDigitalPianism za szybki komentarz. Mam poprawione pytanie z kodem.
Kul

1
możesz spróbować z $ this -> _ collection-> getSelect ();
Rakesh Jesadiya

Odpowiedzi:


37

Powyższe odpowiedzi są poprawne, ale niektóre kolekcje gromadzą tylko zaznaczenie w _beforeLoad()metodzie, w przeciwieństwie do inicjowania go w konstruktorze. Oznacza to, że otrzymasz pusty ciąg, jeśli spróbujesz wyprowadzić zapytanie SQL przed załadowaniem kolekcji.

Przykładem tego jest \Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection. Więc jeśli otrzymujesz nieoczekiwane wyniki, załaduj kolekcję (to zbuduje ostateczne zapytanie wyboru), a następnie wyślij zapytanie.

$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

Możesz użyć tego samego co magento 1, aby wydrukować zapytanie w 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();

Doskonały. Nie mam tego samego dla M2. jego praca jest idealna!
Kul

8

Możesz użyć funkcji __toString () do wydrukowania zapytania w Magento 2

$collection = "Your Query";

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


1

Mam nadzieję, że chcesz wydrukować zapytanie, aby zidentyfikować problem nieprawidłowej liczby getize. za każdym razem, gdy użyjesz grupowania według zapytania, wówczas wywołanie funkcji getSize oznacza, że ​​poda dane pierwszego rekordu, a więc poda złą liczbę. w tym celu przed osadzeniem grupy według zapytania. powinieneś wywołać funkcję getSize. więc ustawi się przed wykonaniem grupy według zapytania.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.