Powiedzmy mam kolekcję takich jak:Jak drukować zbiórki zapytanie mysql w Magento
$products = Mage::getModel('catalog/product')
->getCollection()
...
->load();
Jak wydrukować rzeczywisty kod MySQL, która pobiera wykonywane?
Powiedzmy mam kolekcję takich jak:Jak drukować zbiórki zapytanie mysql w Magento
$products = Mage::getModel('catalog/product')
->getCollection()
...
->load();
Jak wydrukować rzeczywisty kod MySQL, która pobiera wykonywane?
Zawsze można zobaczyć zapytanie sql w pewnym momencie przez echo getSelect jak pokazano:
$products = Mage::getModel('catalog/product')
->getCollection();
echo $products->getSelect();
Aby zmienić parametry zapytania, które chcesz sprawdzić metod, takich jak:
$products->addAttributeToSelect('someattribute');
$products->addAttributeToFilter('someattribute', array('eq'=>'1'));
Problem z twoją odpowiedzą Nick polega na tym, że kiedy zaczynasz dodawać atrybuty lub niestandardowe kolumny lub inne rzeczy, echo $ collection-> getSelect() nie bierze pod uwagę tych dodatków. Najpierw należy wczytać kolekcję, tak jak to, 'echo $ collection-> load() -> getSelect()'. Jego czystsze w użyciu 'echo $ collection-> getSelectSql (true)' –
@ShawnAbramson, nadal nie zawiera innych atrybutów z kwerendy. – user1240207
@ user1240207 - tak, właśnie uświadomiłem sobie, że musisz wywołać '' '-> load()' '' przed uruchomieniem $ collection-> getSelectSql (true). Atrybuty zostaną dodane do zapytania po załadowaniu kolekcji. –
Można drukować
$products->getSelect()->assemble();
Nie potrzebuję nawet 'assemble()', tylko 'echo $ products-> getSelect(); ' – Max
Masz rację: dziękuję za poprawę! –
można drukować kolekcji za pomocą poniższego kodu: Możemy drukować kwerendy kolekcji za pomocą getSelect()->__toString()
$products = Mage::getModel(‘catalog/product’)
->addAttributeToFilter(‘status’, array(‘eq’ => 1));
echo $products->getSelect()->__toString();
Widziałeś http://kuldipchudasama.wordpress.com/2012/07/16/magento-print-query-of-collection/? To działa dobrze.
Tak, to działa dobrze – JoenasE
Większość innych odpowiedzi tutaj powiedzieć, że $products->getSelect()
to zrobi - to wszystko jest w porządku, jeśli masz zamiar z nim zrobić jest echo
, ale w rzeczywistości getSelect()
nie tylko zwracać ciąg, to zwraca obiekt Varien_Db_Select.
Wywoływanie echo
na tym obiekcie automatycznie wyzwala swoją metodę __toString()
, więc po prostu ciąg SQL, ale spróbuj przekazaniem go do Mage::log()
a dostaniesz dużo więcej niż oczekiwano.
Jeśli chcesz tylko do logowania SQL, można użyć:
Mage::log($products->getSelect()->__toString());
Albo jak o użyciu obiektu własnego:
$products->printLogQuery(false, true); // don't echo, do log
printLogQuery
jest zdefiniowana w lib/Varien/data/Collection /Db.php.
Jeśli prosty zestaw pierwszy parametr ->load()
do true
, tak:
$products = Mage::getModel('catalog/product')
->getCollection()
...
->load(true);
Krok 1-
$result_colletion = print_r($collection->getSelect());
Mage::log($$result_colletion, null, custom_collection.log,true);
Krok 2-
Po tym logowaniu do panelu administracyjnego Magento i włącz rejestrowanie ustawień. Patrz poniżej .
System > Configuration > Developer > Log Settings
Etap 3
Następnie patrz plik dziennika custom_collection.log
w var/log/
folderu.
WYBIERZ e
. entity_id
, IF (at_name.value_id> 0, at_name.value, at_name_default.wartość) 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'
OD catalog_product_entity
AS e
INNER JOIN catalog_product_entity_varchar
AS at_name_default
ON (at_name_default
. entity_id
= e
. entity_id
) I (at_name_default
. attribute_id
= (SELECT attribute_id OD eav_attribute
ea LEFT JOIN eav_entity_type
et ON ea.entity_type_id = et.entity_type_id WHERE ea
. attribute_code
= 'name' AN D et.entity_type_code = 'katalog_product')) ORAZ at_name_default
. store_id
= 0 LEWO Dołącz catalog_product_entity_varchar
CO at_name
ON (at_name
. entity_id
= e
. entity_id
) i (at_name
. attribute_id
= (SELECT attribute_id Z eav_attribute
EA LEWO Dołącz eav_entity_type
ET ea.entity_type_id = et.entity_type_id GDZIE ea
. attribute_code
= 'nazwa' AND et.entity_type_code = 'catalog_product')) I (at_name
. store_id
= 1) LEFT JOIN 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) ze catalog_category_product GDZIE product_id = e.entity_id I category_id! = 2)
INNER JOIN catalog_category_entity_int
AS ccei ON ccei. entity_id
= pcategory. entity_id
I 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
LEWO Dołącz catalog_product_entity_int
CO cpei
ON CPEI. entity_id
= e
. entity_id
I cpei.entity_type_id = 4 I cpei.attribute_id = 70
LEFT JOIN catalog_product_entity_int
AS cpeis
NA 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
Czy mógłbyś jeszcze bardziej rozwinąć swoją odpowiedź, dodając nieco więcej opisu dostarczonego rozwiązania? – abarisone
To przypomina mi przysłowie: "daj człowiekowi rybę, nakarm go na jeden dzień, naucz go łowić, karm go na całe życie". Pytający chce wiedzieć, jak łowić ryby, a ty po prostu dajesz im rybę. Ponadto ten kod nie jest przenośny. Używa identyfikatorów atrybutów i identyfikatorów kategorii, które są specyficzne dla twojego systemu. Formatowanie, koleś ... Gdyby po prostu wcięcie każdej linii o 4 spacje, powyższy tekst byłby znacznie czytelniejszy i nadal zawierałby odsunięcia we wszystkich właściwych miejscach. –
w 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();
}
}
I pamiętaj, że fabryka kolekcja jest magia klasa, która może przywiązuje do każdej klasy jak Magento 1 nie było wystarczająco skomplikowane.
Pracuję z kolekcjami każdego dnia. Jest to bez wątpienia właściwa droga.
echo $collection->getSelectSql(true);
Spróbuj następujący kod.
$products = Mage::getModel('catalog/product')
->getCollection();
echo $products->getSelect();
To jest poprawna odpowiedź tutaj. 'echo $ collection-> getSelectSql (true);' –
Korekta mojego oryginalnego komentarza. Powinien to być '' 'echo $ collection-> load() -> getSelectSql (true)' '' –