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

时间:2012-03-23 13:29:00

标签: sql magento

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

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

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

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

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

我无法找到产品负载()。有什么想法吗?

7 个答案:

答案 0 :(得分:27)

load()实际上是在数据库上执行查询的方法。出于这个原因,没有选择“找到产品load()”。最终查询是在load()方法之前生成的。

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

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

答案 1 :(得分:6)

您可以通过

转储实际查询

启用SQL调试, 转到

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

更改第98行

protected $_debug = false;

protected $_debug = true;

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

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

答案 2 :(得分:1)

您可以通过记录页面加载的所有查询来受益 有关详细信息,请参阅以下文章:
http://blogs.ifuelinteractive.com/2009/10/18/logging-all-sql-in-magento/

答案 3 :(得分:1)

产品负载不仅有一个查询。

查看load()课程中的Mage_Eav_Model_Entity_Abstract方法,看看它是如何工作的。

答案 4 :(得分:0)

好的产品没有 - > getSelect()方法,但是我们可以通过集合来解决这个问题

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

将回应

  

SELECT e。* FROM catalog_product_entity AS e WHERE(e.sku ='slickerBrush_config')

答案 5 :(得分:0)

在任何模态上调用 - > load()方法时查看所有查询被触发的内容。更好地检查mysql.log文件。检查你的mysql登录是否已启用或在my.cnf中添加此项,然后重启MySQL服务器:

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

大多数时候这两行被注释掉或者没有预设更好的检查其他conf也像my.conf,mysql.conf等。还有时空的这个文件或它的大小增长很快可能会带走大部分服务器内存。

干杯!

答案 6 :(得分:0)

从中选择sql

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

不可靠。使用n98-magerun.phar激活数据库日志

n98-magerun.phar dev:log:db

然后您可以尾随日志文件

tail -f var/debug/pdo_mysql.log

查看实时执行的查询。
完成后,使用相同的命令停用数据库日志

n98-magerun.phar dev:log:db