产品加载的完整SQL查询是什么?
我的意思是,如何获取此代码的完整SQL查询: -
$productId = 52;
$product = Mage::getModel('catalog/product')->load($productId);
我知道,我们可以通过printLogQuery获取集合对象的SQL查询。例如: -
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->printLogQuery(true);
我无法找到产品负载()。有什么想法吗?
答案 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
。* FROMcatalog_product_entity
ASe
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