Magento: Как получить SQL-запрос о загрузке продукта? - PullRequest
5 голосов
/ 23 марта 2012

Что такое полный запрос SQL для загрузки продукта?

Я имею в виду, как получить полный SQL-запрос для этого кода: -

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

Я знаю, мы можем получить запрос SQL для объекта коллекции через printLogQuery. Пример: -

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

Я не могу найти такой для загрузки продукта (). Есть идеи?

Ответы [ 6 ]

27 голосов
/ 22 июля 2012

load() на самом деле метод, который выполняет запрос к базе данных.По этой причине нет опции «найти такой для продукта load()».Окончательный запрос генерируется до load() метода.

Кроме того, более простой способ получить запрос на экране, например (на вашем примере):

$collection = Mage::getModel('catalog/product')->getCollection();
echo $collection->getSelect()->__toString();
6 голосов
/ 03 апреля 2012

Вы можете вывести фактический запрос через

Чтобы включить отладку SQL, Перейти к

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

изменить строку 98

protected $_debug = false;

до

protected $_debug = true;

Он запишет SQL прямо в значение строки 126

protected $_debugFile           = 'var/debug/pdo_mysql.log';
1 голос
/ 23 марта 2012

Не существует только одного запроса для загрузки продукта.

Взгляните на метод load() из класса Mage_Eav_Model_Entity_Abstract, чтобы увидеть, как он работает.

1 голос
/ 23 марта 2012

Может быть, вы получите выгоду от регистрации всех запросов на загрузку страницы.
Обратитесь к следующей статье для получения дополнительной информации:
http://blogs.ifuelinteractive.com/2009/10/18/logging-all-sql-in-magento/

0 голосов
/ 12 ноября 2015

Чтобы увидеть, что все запросы запускаются при вызове метода -> load () в любом модальном режиме. Лучше зайдите в файл mysql.log. Проверьте, включен ли ваш логин mysql, или добавьте его в my.cnf, а затем перезапустите сервер MySQL:

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

В большинстве случаев эти две строки закомментированы или не заданы заранее, лучше проверьте другие conf, такие как my.conf, mysql.conf и т. Д. Также время от времени очищайте этот файл, или его размер очень быстро увеличивается, что может отнять большую часть память сервера.

ура!

0 голосов
/ 23 марта 2012

Хорошо, у $ product нет метода -> getSelect (), но есть коллекция, которую мы можем обойти, выполнив

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

, которая будет отображать

SELECT e. * ОТ catalog_product_entity КАК e ГДЕ (e.sku = 'slickerBrush_config')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...