Как распечатать запрос mysql коллекции в magento

Скажем, у меня есть коллекция вроде:

$products = Mage::getModel('catalog/product')
            ->getCollection()
            ...
            ->load();

Как распечатать фактический код MySQL, который выполняется?

Ответ 1

Вы всегда можете просмотреть свой SQL-запрос в определенной точке, повторив getSelect, как показано:

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

Чтобы изменить параметры запроса, вы хотите проверить методы, например:

$products->addAttributeToSelect('someattribute');
$products->addAttributeToFilter('someattribute', array('eq'=>'1'));

Ответ 2

Вы можете распечатать коллекцию, используя следующий код: Мы можем распечатать запрос коллекции с помощью getSelect()->__toString()

$products = Mage::getModel(‘catalog/product’)
 ->addAttributeToFilter(‘status’, array(‘eq’ => 1));
echo $products->getSelect()->__toString();

Вы видели http://kuldipchudasama.wordpress.com/2012/07/16/magento-print-query-of-collection/?   Это хорошо работает.

Ответ 3

В большинстве других ответов здесь говорится, что $products->getSelect() сделает это - это прекрасно, если все, что вы собираетесь с ним делать, - это echo, но на самом деле getSelect() не просто возвращает строку, она возвращает объект Varien_Db_Select.

Вызов echo на этом объекте автоматически запускает свой метод __toString(), поэтому вы просто получите строку SQL, но попробуйте передать его на Mage::log(), и вы получите намного больше, чем вы ожидали.

Если вы просто хотите зарегистрировать SQL, вы можете использовать:

Mage::log($products->getSelect()->__toString());

Или как об использовании собственного объекта:

$products->printLogQuery(false, true); // don't echo, do log

printLogQuery определяется в lib/Varien/Data/Collection/Db.php.

Ответ 4

Вы можете распечатать

$products->getSelect()->assemble();

Ответ 5

Если вы просто установите первый параметр ->load() в true, например:

$products = Mage::getModel('catalog/product')
            ->getCollection()
            ...
           ->load(true);

Ответ 6

Я работаю с коллекциями каждый день. Это, без сомнения, правильный путь.

echo $collection->getSelectSql(true);

Ответ 7

Шаг 1-

$result_colletion = print_r($collection->getSelect()); 
Mage::log($$result_colletion, null, custom_collection.log,true);

Шаг 2-

После этого войдите в раздел администратора magento и включите запись в журнал. См. Ниже.

System > Configuration > Developer > Log Settings

Шаг 3 -

После этого см. файл журнала custom_collection.log в папке var/log/.

Ответ 8

В Magento 2: -

namespace <Company>\<Module>\Block\Adminhtml\Tab\Log;
class Grid 
extends \Magento\Backend\Block\Widget\Grid\Extended
{

    protected $_collectionFactory;

    /**
     * Constructor
     *
     * @param \Magento\Backend\Block\Template\Context $context
     * @param \Magento\Backend\Helper\Data $backendHelper
     * @param \<Company>\<Module>\Model\ResourceModel\Log\CollectionFactory $collectionFactory
     * @param Psr\Log\LoggerInterface $logger
     * @param array $data
     */
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,
        \<Company>\<Module>\Model\ResourceModel\Log\CollectionFactory $collectionFactory,
        \Psr\Log\LoggerInterface $logger,
        array $data = []
    ) {
        $this->_logger = $logger;
        $this->_collectionFactory = $collectionFactory;
        parent::__construct($context, $backendHelper, $data);
    }

    /**
     * {@inheritdoc}
     */
    protected function _prepareCollection()
    {
        $collection = $this->_collectionFactory->create();
        $this->_logger->info($collection->getSelect()->__toString());
        $this->setCollection($collection);
        return parent::_prepareCollection();
    }
}

И помните, что коллекция factory является магическим классом, который может присоединяться к каждому классу, поскольку Magento 1 не был достаточно сложным.

Ответ 9

Попробуйте использовать следующий код.

 $products = Mage::getModel('catalog/product')
                ->getCollection();

    echo $products->getSelect();

Ответ 10

SELECT   e. entity_id  IF (at_name.value_id > 0, at_name.value, at_name_default.value) AS name,

pcategory_name.value AS 'PCat',

  eaov.value AS 'brand',
  stoke.stock_status AS 'inStoke',

  pcategory_name.entity_id AS 'cat_id',
   ccei.`value` AS 'is_active'

ОТ  catalog_product_entity AS e  ВНУТРЕННЕЕ СОЕДИНЕНИЕ        catalog_product_entity_varchar AS at_name_default             ON (at_name_default. entity_id= e. entity_id) И                 (at_name_default. attribute_id= (SELECT attribute_id FROM eav_attribute ea LEFT JOIN eav_entity_type et ON ea.entity_type_id = et.entity_type_id WHERE ea. attribute_code= 'name' AND et.entity_type_code = 'catalog_product ')) А ТАКЖЕ                 at_name_default. store_id= 0   ВЛЕВО         catalog_product_entity_varchar AS at_name             ON (at_name. entity_id= e. entity_id) И                 (at_name. attribute_id= (SELECT attribute_id FROM eav_attribute ea LEFT JOIN eav_entity_type et ON ea.entity_type_id = et.entity_type_id WHERE ea. attribute_code= 'name' AND et.entity_type_code = 'catalog_product ')) А ТАКЖЕ                 (at_name. store_id= 1)          ВЛЕВО         cataloginventory_stock_status AS stoke             ON (stoke. product_id= e. entity_id)

                LEFT JOIN 
      `catalog_product_entity_varchar` AS `key` 
           ON (`key`.`entity_id` = `e`.`entity_id`) 
            AND key.attribute_id = 160

INNER JOIN catalog_category_entity AS pcategory ON pcategory.entity_id = (SELECT MAX (category_id) FROM catalog_category_product WHERE product_id = e.entity_id AND category_id!= 2)

ВХОДЯЩИЙ ПРИСОЕДИНЕНИЕ catalog_category_entity_int AS ccei ON ccei. entity_id= pcategory. entity_id И ccei. attribute_id= 34

  LEFT JOIN `catalog_category_entity_varchar` AS `pcategory_name` ON pcategory_name.entity_id = pcategory.entity_id AND pcategory_name.attribute_id = 33

LEFT JOIN catalog_product_entity_int AS cpei ON cpei. entity_id= e. entity_id    И cpei.entity_type_id = 4     И cpei.attribute_id = 70

LEFT JOIN catalog_product_entity_int AS cpeis ON cpeis. entity_id= e. entity_id

  AND cpeis.attribute_id = 155

  LEFT JOIN eav_attribute_option_value AS `eaov` ON eaov.option_id = cpei.value  

 WHERE  ccei.`value`=1 AND pcategory.parent_id=2