Frage

Also ich habe das Ressourcen-Modell, das ich zog von einigen admin-code auf die dashboard.Es funktioniert, aber ich kann nicht scheinen, um die Verknüpfung zu es.Tun ->getSelect()->__toString(); zeigt nichts?So ist dies nicht eine normale Sammlung?Warum funktioniert es nicht funktionieren wie andere Sammlungen?

Ich vermute, dass, um zu erreichen, was ich erreichen möchte ist, dass ich bin gehen zu müssen, zu verlängern die Sammlung model, aber ich wollte einfach nur sehen, wenn ich mehr Ahnung davon, was hier vor sich geht.

$storeId = $this->helper('core')->getStoreId();
$collection = Mage::getResourceModel('sales/report_bestsellers_collection')
    ->setModel('catalog/product')
    ->addStoreFilter($storeId);

$collection->getSelect()->join(
        array('category_product' => 'catalog_category_product'),
        'main_table.product_id = category_product.product_id', 
        array('category_product.*')
    )->where('category_product.category_id = ?', '3')
     ->order('main_table.qty_ordered DESC')
     ->limit($limit);
War es hilfreich?

Lösung

Die Berichterstattung Sammlungen arbeiten ein wenig anders, dass die Mage_Core_Model_Abstract/CRUD-Sammlungen.Die CRUD-Sammlungen haben eine SQL-Abfrage zugewiesen sofort bei der Instanziierung.Die Berichterstattung Sammlung, aber, initialisiert der SQL-Anweisung während seine Last Betrieb.Sie können dies in der load Methode unten in die abstrakte Basisklasse für alle reporting-Sammlungen.

#File: app/code/core/Mage/Reports/Model/Resource/Report/Collection/Abstract.php
public function load($printQuery = false, $logQuery = false)
{
    if ($this->isLoaded()) {
        return $this;
    }
    $this->_initSelect();
    if ($this->_applyFilters) {
        $this->_applyDateRangeFilter();
        $this->_applyStoresFilter();
        $this->_applyCustomFilter();
    }
    return parent::load($printQuery, $logQuery);
}

Es gibt keine wählen, bis _initSelect genannt wird.

Der Allgemeine Ansatz, den Sie nehmen wollen, das hier ist

  1. Erstellen Sie eine neue Ressource, die model-Klasse, die erweitert die Mage_Reports_Model_Resource_Report_Collection_Abstract Klasse

  2. Definieren Sie eine _applyCustomFilter Methode in Ihrer Klasse

und dann nutze deine neuen Ressourcen-Modell.Ihre _applyCustomFilter Methode würde ungefähr so Aussehen.

protected function _applyCustomFilter()
{
    $return = parent::_applyCustomFilter();
    //manipulate the select all you want here (`$this->getSelect()`)
    return $return;
}

Andere Tipps

Sieht so aus, als würden Sie versuchen, eine Liste von "meistverkauften" Produkten zu laden (und von einer bestimmten Kategorie gefiltert). Ich habe es in der Vergangenheit mit der Produktsammlung aus dem Berichtemodul gemacht.

Schreiben Sie dies:

$category = Mage::getModel('catalog/category')->load(3);
$report = Mage::getResourceModel('reports/product_collection')
        ->addAttributeToSelect('*')
        ->addOrderedQty()
        ->setOrder('ordered_qty', 'desc')
        ->addCategoryFilter($category);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top