Magento:如何获取产品负载的SQL查询?

Muk*_*ain 6 sql magento

产品加载的完整SQL查询是什么?

我的意思是,如何获取此代码的完整SQL查询: -

$productId = 52;
$product = Mage::getModel('catalog/product')->load($productId);
Run Code Online (Sandbox Code Playgroud)

我知道,我们可以通过printLogQuery获取集合对象的SQL查询.例:-

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->printLogQuery(true);
Run Code Online (Sandbox Code Playgroud)

我无法找到产品负载().任何的想法?

Łuk*_* L. 29

load()实际上是在数据库上执行查询的方法.因此,没有选择"找到这样的产品load()".在load()方法之前生成最终查询.

另外,例如,在屏幕上获取查询的简单方法是(在您的示例中):

$collection = Mage::getModel('catalog/product')->getCollection();
echo $collection->getSelect()->__toString();
Run Code Online (Sandbox Code Playgroud)

  • 就像@bluescrubbie所说的那样,在回显时不必调用`-> __ toString()`。如果在类中定义了它,那么在回显时会自动调用它。同样,您可以执行以下操作:$ sql =(string)$ collection-> getSelect()。(string)还导致对__toString()的自动调用。 (2认同)

Ver*_*ton 6

您可以通过转储实际查询

要启用SQL调试,请转到

lib/Varien/Db/Adapter/Pdo/Mysql.php
Run Code Online (Sandbox Code Playgroud)

改变第98行

protected $_debug = false;
Run Code Online (Sandbox Code Playgroud)

至

protected $_debug = true;
Run Code Online (Sandbox Code Playgroud)

它会将SQL直接写入第126行的值

protected $_debugFile           = 'var/debug/pdo_mysql.log';
Run Code Online (Sandbox Code Playgroud)