Существует getSelect()->__toString();
доступна в Magento 1 для печати запроса коллекции. как пример ниже
$products = Mage::getModel(‘catalog/product’)
->addAttributeToFilter(‘status’, array(‘eq’ => 1));
echo $products->getSelect()->__toString();
Есть ли какой-нибудь метод, доступный в magento 2? Я нашел это, ->printLogQuery(true);
но у меня не работает.
Обновление: ниже код. Я пытаюсь получить продукты бестселлера. его работа идеально, но я хочу напечатать запрос для отладки.
$this->_collection->getSelect()
->joinLeft(
'sales_order_item',
'e.entity_id = sales_order_item.product_id',
array('qty_ordered'=>'SUM(sales_order_item.qty_ordered)'))
->group('e.entity_id')
->order('qty_ordered '.$this->getCurrentDirectionReverse());
magento2
collection
query
Куль
источник
источник
printLogQuery
сОтветы:
Ответы выше верны, но некоторые коллекции только собирают select в
_beforeLoad()
методе, а не инициализируют его в конструкторе. Это означает, что вы получите пустую строку, если попытаетесь вывести запрос SQL перед загрузкой коллекции.Примером этого является
\Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection
. Поэтому, если вы получаете неожиданные результаты, загрузите коллекцию (это создаст окончательный запрос выбора) и затем выведите запрос.источник
Вы можете использовать то же самое как magento 1, чтобы напечатать запрос в magento 2.
источник
Вы можете использовать функцию __toString () для печати запроса в Magento 2
источник
Или просто используйте
источник
Я надеюсь, что вы хотите напечатать запрос, чтобы определить проблему неправильного подсчета getize. всякий раз, когда вы используете группирование по запросу, вызывайте функцию getSize, что означает, что она выдаст данные первой записи, поэтому будет давать неправильный счет. для этого, прежде чем вставлять группу по запросу. Вы должны вызвать функцию getSize. поэтому он будет установлен перед выполнением групп по запросу.
источник
var_dump ($ галерею-> getSelect () -> __ ToString ());
источник