2010-08-14 6 views
8

yılında getSelectCountSql kırar. Magento kullanarak grubu() O getSelectCountSql kırar ve ben 1 kayıt ve 1 sayfa alıyorum magento

$countSelect->columns('COUNT(DISTINCT e.entity_id)'); 

bunu düzeltmek için bir yol var mı

yapar?

Mage_Adminhtml_Block_Catalog_Product_Grid ait

Teşekkür

_prepareCollection geçersiz kılma ederken ben, bunun içine çalıştırmak
+0

Neden sadece iade edilen koleksiyonda normal bir php sayımı() kullanmıyorsunuz? – silvo

+5

Çünkü bir php şey değil bir mysql şey. Bir koleksiyonda saymayı çağırdığınızda, php bir mysql sorgusu yürüten işlevi çağırır. – pablo

cevap

25
Ben o iş olması gerekiyordu ben buna izin lib/Varien/Veri/Koleksiyon/Db.php dosyası güncellendi

. Bunu yükseltmeler için izlemeniz gerekecek ama işe yarıyor. İşte

public function getSelectCountSql() 
{ 
    $this->_renderFilters(); 
    $countSelect = clone $this->getSelect(); 
    $countSelect->reset(Zend_Db_Select::ORDER); 
    $countSelect->reset(Zend_Db_Select::LIMIT_COUNT); 
    $countSelect->reset(Zend_Db_Select::LIMIT_OFFSET); 
    $countSelect->reset(Zend_Db_Select::COLUMNS); 

    // Count doesn't work with group by columns keep the group by 
    if(count($this->getSelect()->getPart(Zend_Db_Select::GROUP)) > 0) { 
     $countSelect->reset(Zend_Db_Select::GROUP); 
     $countSelect->distinct(true); 
     $group = $this->getSelect()->getPart(Zend_Db_Select::GROUP); 
     $countSelect->columns("COUNT(DISTINCT ".implode(", ", $group).")"); 
    } else { 
     $countSelect->columns('COUNT(*)'); 
    } 
    return $countSelect; 
} 
+13

Varien sınıfları, "app/code/local" dizininde Mage sınıfları ile aynı şekilde geçersiz kılınabilir. 'Yükseltmeleri takip et' yerine bunu kullanın. – clockworkgeek

+0

+1 to @ @clockworkgeek - 4 yıl sağlam Magento çalışması ve lib/Varien'i app/code/local'den geçersiz kılacağınızı hiç bilmiyordum. Şerefe. – philwinkle

+5

Netleştirmek için: lib/Varien/Data/Collection/Db.php dosyasını/code/local/Varien/Data/Collection/Db.php dosyasına kopyalayın ve orada düzenleyin. – mniess

0

Çok güzel makale benim için Db.php önerildiği

Değişiklikleri katalog koleksiyonunda tarafından grubunu çözmek için gerekli değildir çalışması için yapılan birkaç değişikliklerdir. Ben İşte bu şeylerden sonra getSelectCountSql()

if(count($this->getSelect()->getPart(Zend_Db_Select::GROUP)) > 0) { $countSelect->reset(Zend_Db_Select::GROUP); } 

eklenen kodudur collection.php Catalog-> model aracın> Ressource-> EAV-> Mysql4-> ürün-> benzer değişiklik yaptık çözüldü ama yeni bir sorun geliyor .. Tüm filtreler için Katmanlı gezinme miktarları 1.

0

Koleksiyonumun getSize() yöntemini geçersiz kılarak Core dosyalarına dokunmadan yaptım. Bu sizin için çalışıyorsa

public function getSize() 
{ 
    if (count($this->getSelect()->getPart(Zend_Db_Select::GROUP)) > 0) { 

     // Create a new collection from ids because we need a fresh select 
     $ids = $this->getAllIds(); 
     $new_coll = Mage::getModel('module_key/model')->getCollection() 
       ->addFieldToFilter('id', array('in' => $ids)); 

     // return the collection size 
     return $new_coll->getSize(); 
    } 

    return parent::getSize(); 
} 

bazı durumlarda ..

Bouni

3

söyle Eric'ten yöntem çalışmaz. Bu Magento ürün toplama 1 sayımını dönen getSize() konusunda bana yardımcı

public function getSize() 
{ 
    return sizeof($this->getAllIds()); 
} 

:

Ben aşağıda işlevini kullanarak bu çözmüş

public function getSize() 
{ 
    if (is_null($this->_totalRecords)) { 
     $sql = $this->getSelectCountSql(); 

     $result = $this->getConnection()->fetchAll($sql, $this->_bindParams);; 

     foreach ($result as $row) { 
      $this->_totalRecords += reset($row); 
     } 

    } 
    return intval($this->_totalRecords); 
} 
1

için getSize() yöntemi yeniden yazmak için iyidir CE 1.5.

Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection dosyasının üzerine yazdım ve yukarıdaki işlevin üzerine yerleştirin.