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

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

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.