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());
printLogQuery
z którymOdpowiedzi:
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.źródło
Możesz użyć tego samego co magento 1, aby wydrukować zapytanie w magento 2.
źródło
Możesz użyć funkcji __toString () do wydrukowania zapytania w Magento 2
źródło
Lub po prostu użyj
źródło
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.
źródło
var_dump ($ collection-> getSelect () -> __ toString ());
źródło