13

次のようなコレクションがあるとします。

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

実行される実際の MySQL コードを出力するにはどうすればよいですか?

4

9 に答える 9

21

次のように getSelect をエコーすることで、特定の時点で SQL クエリをいつでも表示できます。

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

クエリ パラメータを変更するには、次のようなメソッドをチェックアウトします。

$products->addAttributeToSelect('someattribute');
$products->addAttributeToFilter('someattribute', array('eq'=>'1'));
于 2012-04-04T19:19:28.977 に答える
13

以下のコードを使用してコレクションを印刷できます: コレクションのクエリを使用して印刷できます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/を見たことがありますか? これはうまくいきます。

于 2012-08-29T05:22:40.873 に答える
7

ここでの他のほとんどの回答は、それでうまく$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

printLogQuerylib/Varien/Data/Collection/Db.php で定義されています。

于 2014-12-09T09:12:28.127 に答える
3

印刷できます

$products->getSelect()->assemble();
于 2012-04-04T16:35:35.793 に答える
2

私は毎日コレクションを扱っています。これは間違いなく正しい方法です。

echo $collection->getSelectSql(true);

于 2016-05-15T07:09:07.090 に答える
2

次のように、の最初のパラメータを単純に->load()toに設定すると、次のtrueようになります。

$products = Mage::getModel('catalog/product')
            ->getCollection()
            ...
           ->load(true);
于 2015-03-17T17:46:49.597 に答える
1

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();
    }
}

コレクション ファクトリは、Magento 1 が十分に複雑ではないため、すべてのクラスにアタッチできる魔法のクラスであることを思い出してください。

于 2016-05-15T04:54:32.517 に答える
0

次のコードを試してください。

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

    echo $products->getSelect();
于 2016-05-16T05:14:25.070 に答える