Luc*_*one 12 debugging magento
假设我有一个类似的集合:
$products = Mage::getModel('catalog/product')
->getCollection()
...
->load();
Run Code Online (Sandbox Code Playgroud)
如何打印执行的实际MySQL代码?
小智 20
您始终可以通过回显getSelect来查看某个点的SQL查询,如下所示:
$products = Mage::getModel('catalog/product')
->getCollection();
echo $products->getSelect();
Run Code Online (Sandbox Code Playgroud)
要更改查询参数,您需要检查以下方法:
$products->addAttributeToSelect('someattribute');
$products->addAttributeToFilter('someattribute', array('eq'=>'1'));
Run Code Online (Sandbox Code Playgroud)
小智 13
您可以使用以下代码打印集合:我们可以使用打印集合的查询 getSelect()->__toString()
$products = Mage::getModel(‘catalog/product’)
->addAttributeToFilter(‘status’, array(‘eq’ => 1));
echo $products->getSelect()->__toString();
Run Code Online (Sandbox Code Playgroud)
你看过http://kuldipchudasama.wordpress.com/2012/07/16/magento-print-query-of-collection/吗?这很好用.
这里的大多数其他答案都表示$products->getSelect()会这样做 - 如果您要处理它的话,这很好echo,但事实上getSelect()它并不只是返回一个字符串,而是返回一个Varien_Db_Select对象.
调用echo该对象会自动触发其__toString()方法,因此您只需获取SQL字符串,但尝试将其传递给Mage::log()您,您将获得比预期更多的内容.
如果您只想记录SQL,可以使用:
Mage::log($products->getSelect()->__toString());
Run Code Online (Sandbox Code Playgroud)
或者如何使用对象自己:
$products->printLogQuery(false, true); // don't echo, do log
Run Code Online (Sandbox Code Playgroud)
printLogQuery 在lib/Varien/Data/Collection/Db.php中定义.