2012-03-23 32 views
5

Truy vấn SQL đầy đủ cho tải sản phẩm là gì?Magento: Cách nhận truy vấn SQL về Tải sản phẩm?

Ý tôi là, làm thế nào để có được những truy vấn SQL đầy đủ cho mã này: -

$productId = 52; 
$product = Mage::getModel('catalog/product')->load($productId); 

tôi biết, chúng tôi có thể nhận được các truy vấn SQL cho đối tượng thu thập thông qua printLogQuery. Ví dụ: -

$collection = Mage::getModel('catalog/product')->getCollection(); 
$collection->printLogQuery(true); 

Tôi không thể tìm thấy như vậy cho tải sản phẩm(). Bất kỳ ý tưởng?

Trả lời

25

load() thực sự là phương pháp thực thi truy vấn trên cơ sở dữ liệu. Vì lý do đó không có tùy chọn để "tìm sản phẩm như vậy cho sản phẩm load()". Truy vấn cuối cùng được tạo trước phương thức load().

Additionaly, phương pháp dễ dàng để có được truy vấn trên màn hình ví dụ là (trên ví dụ của bạn):

$collection = Mage::getModel('catalog/product')->getCollection(); 
echo $collection->getSelect()->__toString(); 
+1

cần phải chấm dứt tuyên bố cuối cùng đó. – bluescrubbie

+1

Khi @bluescrubbie đang nói, bạn không phải gọi '-> __ toString()' khi bạn echo. Nếu nó được định nghĩa trong lớp, thì nó sẽ tự động được gọi khi lặp lại. Tương tự, bạn có thể làm điều này: '$ sql = (string) $ collection-> getSelect()'. '(String)' cũng dẫn đến một cuộc gọi tự động tới '__toString()' –

1

Không chỉ có một truy vấn cho tải sản phẩm.

Hãy xem phương thức load() từ lớp Mage_Eav_Model_Entity_Abstract để biết cách hoạt động của nó.

0

Vâng $ sản phẩm không có -> getSelect() phương pháp nhưng một bộ sưu tập nào chúng ta có thể workaround rằng bằng cách làm

$product_sku = 'sku'; 
$products = Mage::getResourceModel('catalog/product_collection') 
    ->addAttributeToSelect('*') 
    ->addAttributeToFilter('sku', $product_sku); 
echo $products->getSelect(); 

nào sẽ echo

CHỌN e * FROM catalog_product_entity. AS e WHERE (e.sku = 'slickerBrush_config')

6

Bạn có thể đổ truy vấn thực tế qua

Để kích hoạt SQL Debugging, Đến

lib/Varien/Db/Adapter/Pdo/Mysql.php 

thay đổi dòng 98

protected $_debug = false; 

để

protected $_debug = true; 

Nó sẽ viết SQL thẳng đến giá trị của dòng 126

protected $_debugFile   = 'var/debug/pdo_mysql.log'; 
0

Để xem những gì tất cả các truy vấn bị sa thải trong khi gọi - Phương pháp> load() trên bất kỳ phương thức. Kiểm tra tốt hơn vào tập tin mysql.log. Kiểm tra log mysql của bạn được kích hoạt hoặc Thêm này trong của tôi.CNF và sau đó khởi động lại MySQL server:

general_log = 1 
log=/var/log/mysqld_query.log 

Phần lớn thời gian hai dòng này được nhận xét ra hoặc không cài sẵn kiểm tra tốt hơn trong conf khác cũng như my.conf, mysql.conf vv Ngoài ra bất cứ lúc nào có sản phẩm nào tập tin này hoặc kích thước của nó phát triển rất nhanh có thể lấy đi phần lớn bộ nhớ máy chủ.

Chúc mừng!

Các vấn đề liên quan