2012-03-23 20 views
5

¿Cuál es la consulta SQL completa para la carga del producto?Magento: ¿Cómo obtener una consulta SQL sobre la carga del producto?

quiero decir, cómo conseguir la consulta SQL completa para este código: -

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

que sé, podemos obtener la consulta SQL para el objeto de la colección a través printLogQuery. Ejemplo: -

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

No pude encontrar tal producto para la carga del producto(). ¿Alguna idea?

Respuesta

25

load() es en realidad el método que ejecuta la consulta en la base de datos. Por ese motivo, no existe la opción de "encontrarlo para el producto load()". La consulta final se genera antes del método load().

Adicionalmente, el método más fácil conseguir consulta en la pantalla, por ejemplo, es (en su ejemplo):

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

necesidad de terminar esa última declaración. – bluescrubbie

+1

Como dice @bluescrubbie, no tiene que llamar '-> __ aString()' cuando hace eco. Si se define en la clase, se llama automáticamente cuando se hace eco. Del mismo modo, puede hacer esto: '$ sql = (cadena) $ collection-> getSelect()'. El '(cadena)' también da como resultado una llamada automática a '__toString()' –

1

No hay una sola consulta para la carga de producto.

Eche un vistazo al método load() de la clase Mage_Eav_Model_Entity_Abstract para ver cómo está funcionando.

0

Bueno $ producto no tiene un método -> getSelect(), sino una colección no podemos solucionar que al hacer

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

Qué hará eco

SELECT * FROM ecatalog_product_entity. AS e DONDE (e.sku = 'slickerBrush_config')

6

se puede volcar la consulta real a través de

Para habilitar la depuración de SQL, Ir a

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

cambiar la línea 98

protected $_debug = false; 

a

protected $_debug = true; 

Se escribirá el SQL directamente al valor de la línea 126

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

para ver lo que todas las consultas consiguen mientras llama dispararon método -> load() en cualquier modal. Mejor verificar en el archivo mysql.log. Verifique que el inicio de sesión de su mysql esté habilitado o Agregue esto en mi.servidor de CNF y reinicie MySQL:

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

La mayoría de las veces estas dos líneas están deshabilitadas o no predeterminada Superior cheque en otra conf también como my.conf, mysql.conf etc. También vez en cuando vacío este archivo o su tamaño crece muy rápido puede quitar la mayor parte de la memoria del servidor.

¡Salud!

Cuestiones relacionadas