Làm thế nào để in bộ sưu tập truy vấn mysql trong magento 2?


15

getSelect()->__toString();sẵn trong Magento 1 cho truy vấn in của bộ sưu tập. như ví dụ dưới đây

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

Có phương pháp nào có sẵn trong magento 2 không? Tôi đã tìm thấy điều này ->printLogQuery(true);nhưng không làm việc cho tôi.

Cập nhật: bên dưới là mã. Tôi đang cố gắng để có được sản phẩm bán chạy nhất. nó hoạt động hoàn hảo nhưng tôi muốn in truy vấn để gỡ lỗi.

$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
Xin vui lòng gửi mã đầy đủ bạn đang thử nghiệm printLogQueryvới
Raphael tại Digital chơi piano

Cảm ơn @RaphaelatDigitalPianism đã nhận xét nhanh. Tôi đã sửa lại câu hỏi với mã.
Kul

1
bạn có thể thử với $ this -> _ sưu tập-> getSelect ();
Rakesh Jesadiya

Câu trả lời:


37

Các câu trả lời ở trên là chính xác, nhưng một số bộ sưu tập chỉ lắp ráp phần chọn trong _beforeLoad() phương thức, trái ngược với việc khởi tạo nó trong hàm tạo. Điều này có nghĩa là bạn sẽ nhận được một chuỗi trống nếu bạn cố gắng xuất truy vấn SQL trước khi tải bộ sưu tập.

Một ví dụ về điều này là \Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection. Vì vậy, nếu bạn nhận được kết quả không mong muốn thì hãy tải bộ sưu tập (điều này sẽ xây dựng truy vấn chọn cuối cùng) và sau đó xuất truy vấn.

$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

Bạn có thể sử dụng tương tự như magento 1 để in truy vấn trong 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();

Hoàn hảo. Tôi không giống với M2. công việc của nó hoàn hảo!
Kul

7

Bạn có thể sử dụng hàm __toString () để in truy vấn trong Magento 2

$collection = "Your Query";

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.