Magento 2 toplama mysql sorgusu yazdırmak için?


15

Orada getSelect()->__toString();koleksiyonun baskı sorgu için Magento 1 mevcuttur. aşağıdaki örnek gibi

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

Magento 2'de herhangi bir yöntem var mı? Bunu buldum ->printLogQuery(true);ama benim için çalışmıyor.

Güncelleme: kod aşağıdadır. En çok satan ürünleri almaya çalışıyorum. mükemmel iş ama hata ayıklama için sorgu yazdırmak istiyorum.

$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
Test ettiğiniz tam kod sonrası Lütfen printLogQueryile
Dijital pianism de Raphael

Hızlı yorum için @RaphaelatDigitalPianism teşekkürler. Kod ile revize soru var.
Kul

1
$ this -> _ collection-> getSelect () ile deneyebilirsiniz;
Rakesh Jesadiya

Yanıtlar:


37

Yukarıdaki cevaplar doğrudur, ancak bazı koleksiyonlar _beforeLoad()yapıcıda başlatılmasının aksine, yalnızca yöntemdeki seçimi birleştirir . Bu, koleksiyonu yüklemeden önce SQL sorgusunu çıkarmaya çalışırsanız boş bir dize alacağınız anlamına gelir.

Bunun bir örneği \Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection. Beklenmedik sonuçlar alıyorsanız koleksiyonu yükleyin (bu, son seçim sorgusunu oluşturur) ve ardından sorguyu çıktılar.

$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 2'de sorguyu yazdırmak için magento 1 ile aynı kullanabilirsiniz.

$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();

Mükemmel. M2 için aynı değilim. mükemmel iş!
Kul

8

Magento 2'de sorgu yazdırmak için __toString () işlevini kullanabilirsiniz

$collection = "Your Query";

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


1

Umarım getsize sayısı yanlış sorunu tanımlamak için sorgu yazdırmak istiyorum. sorguya göre grup kullandığınızda getSize işlevini çağırdığınızda, ilk kayıt verisi verileceği ve yanlış sayım verileceği anlamına gelir. bunun için sorguya göre grup yerleştirmeden önce. getSize işlevini çağırmalısınız. böylece sorguya göre grup yürütmeden önce ayarlanır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.