Bagaimana cara mencetak query mysql koleksi di magento 2?

15

Ada getSelect()->__toString();tersedia di Magento 1 untuk kueri cetak koleksi. seperti contoh di bawah ini

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

Apakah ada metode yang tersedia di magento 2? Saya telah menemukan ini ->printLogQuery(true);tetapi tidak berhasil untuk saya.

Pembaruan: di bawah ini adalah kode. Saya mencoba mendapatkan produk terlaris. kerjanya sempurna tetapi saya ingin mencetak permintaan untuk debug.

$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());
Kul
sumber
1
Silakan kirim kode lengkap yang Anda uji printLogQuerydengan
Raphael di Digital Pianism
Terima kasih @RaphaelatDigitalPianism untuk komentar cepat. Saya telah merevisi pertanyaan dengan kode.
Kul
1
Anda dapat mencoba dengan $ this -> _ collection-> getSelect ();
Rakesh Jesadiya

Jawaban:

37

Jawaban di atas benar, tetapi beberapa koleksi hanya mengumpulkan pilih dalam _beforeLoad()metode, yang bertentangan dengan inisialisasi dalam konstruktor. Ini berarti Anda akan mendapatkan string kosong jika Anda mencoba menampilkan kueri SQL sebelum memuat koleksi.

Contohnya adalah \Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection. Jadi, jika Anda mendapatkan hasil yang tidak terduga, muat koleksi (ini akan membangun kueri pemilihan akhir) dan kemudian menampilkan kueri.

$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()
Andrei
sumber
11

Anda dapat menggunakan yang sama dengan magento 1 untuk mencetak kueri di 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();
Rakesh Jesadiya
sumber
Sempurna. Saya belum sama untuk M2. kerjanya sempurna!
Kul
7

Anda dapat menggunakan fungsi __toString () untuk mencetak kueri di Magento 2

$collection = "Your Query";

echo $collection->getSelect()->__toString();
Pangeran Patel
sumber
2

Atau, cukup gunakan

echo $collection->getSelect()
Khoa TruongDinh
sumber