Ürün Listesi Özellik Filtresi Sorgusu


12

_getProductCollection() Sınıf yöntemi Mage_Catalog_Block_Product_List aşağıdaki gibi bir filtre ekledim .

protected function _getProductCollection()
{
     ...
    $this->_productCollection = $layer->getProductCollection();
    $this->_productCollection->getSelect()->joinInner(
        array('cpe' => 'catalog_product_entity'),
        'e.entity_id = cpe.entity_id'
    ) 
    ->where("cpe.type_id = 'simple'"); 
    ...
}

Yukarıdaki kod Magento Sürüm 1.7'den beri iyi çalışıyor. Ama ne zaman aşağıdaki kodu yazsam,

Sütun bulunamadı: 1054 'where cümlesi' içinde bilinmeyen 'e.type_id' sütunu

hata.

Kod (çalışmıyor).

protected function _getProductCollection()
{
     ...
    $this->_productCollection = $layer->getProductCollection();
    $this->_productCollection
        ->addAttributeToSelect('type_id')
        ->addAttributeToFilter('type_id','simple');
    ...
}

Şimdi Sorular .

  1. İlk çalışma kodunu kullanırsam herhangi bir performans etkisi olur mu?
  2. uygun bir ürün filtresine sahip olmanın başka bir yolu var mı?

GÜNCELLEME:

Aşağıdaki kodu uyguladığımda ve rwdtema kullandığımda herhangi bir hata almıyorum. Ama ne zaman kullanıcı defaultteması, aşağıdaki hatayı alıyorum,

kod

protected function _getProductCollection()
{
     ...
    $this->_productCollection = $layer->getProductCollection();
    $this->_productCollection
         ->addAttributeToSelect('type_id')
         ->addAttributeToFilter('type_id','simple');
    ...
}

Hata

SQLSTATE [42S22]: Sütun bulunamadı: 1054 'cümlesi' içinde bilinmeyen 'e.type_id' sütunu, sorgu şuydu: SELECT FLOOR ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 AS range, COUNT (*) AS countDAN catalog_product_index_priceAS e iç birleşim catalog_category_product_indexGİBİ cat_indexAÇIK cat_index.product_id = e.entity_id VE cat_index.store_id = 1 VE cat_index.visibility İÇİNDE (2, 4) VE cat_index.category_id = '3' NEREDE ( e. type_idIN ( 'basit' )) AND (e.website_id = '1') AND (e.customer_group_id = 0) AND (e.min_price BOŞ DEĞİL) (YUVARLA ((e.min_price) * 1, 2)) / 10) + 1 SİPARİŞ ZEMİNE ((YUVARLA ((e.min_price) * 1, 2)) / 10) + 1 ASC


hangi magento sürümü u kullanmak ?? * & eflatun yamaları uyguladık
Amit Bera

1
o ne lan? şimdi bir anlamı var ... ben RWD üzerinde bir EE 1.14 üzerinde çalışıyordu, bu sadece kabul edilemez, nasıl bir görünüm teması ana tabloyu değiştirmek nasıl daha kötü bile tüm bir sorguyu değiştirebilirsiniz ... bu bir hata başka bir şey olamazdı . Aferin @Magento Öğrenen!
MauroNigrele

Tam olarak, görünüm teması sorun yaratır. Teşekkürler. Kod bir temadan bağımsız olmalıdır
Magento Learner

Yanıtlar:


0

Bence:

$collection->addAttributeToFilter('type_id', array('eq' => 'simple');

Meli Eklemek gerek yoktur, işler type_idiçin selectbir olduğundan catalog_product_entitykolon ve varsayılan olarak alınır oluyor. Her zaman ne olduğunu en iyi fikir edinmek için son sorguyu günlüğe kaydetmenizi öneririz:

Mage.:log($collection->getSelectSql(true));

BTW: Ana tabloya ( catalog_product_entity) kendi katıldığınız için ilk kod bloğunun bir anlamı yok .


"Magento 1.7'de fiyat filtreleme seçenekleri için kullanılan seçme sql üzerinde bir optimizasyon yaptılar. FROM sql kısmını (ürün varlığı olan - type_id özniteliği içeren) kaldırırlar ve price_index ile ilgili tabloyu ana olan - yaparlar Temel olarak, verilerin seçildiği tablo artık ürün varlık tablosu değil (tüm ürün temel niteliklerini kaybedersiniz) ana tablo ürün dizini haline gelir. Magento ekibi 1.7 sürümden başlayarak ekledi. " Aşağıdakilere bakın
Magento Öğrenci


1
wooow benim hata halk, nedense, ben arka uç blok getCollection yöntemini düşünüyordum, bu yüzden bu senaryoda ilk kod ok iyi çözüm olup olmadığını emin değilim ama Tamam gibi görünüyor. Üzgünüz
MauroNigrele

@MagentoLearner bu gönderi hakkında emin misin? Ben sadece yüklü bir EE1.14 üzerinde kontrol ettik ve hala ana katalog olarak catalog_product_entity kullanarak düz katalog (kesinlikle önerilir) kullanmak için ayarlanmış dışında ancak her iki durumda da select_id mevcut var. Sorguyu orijinal Yanıtta yazdığım gibi günlüğe kaydedebilir misiniz?
MauroNigrele

1
mmmm ilginç ... i Ayrıca bir arama durumunda sorguyu kontrol ve ana tablo olarak catalog_product_entity kullanıyor, belki "magento ekibi" bu değişiklikleri geri almaya karar verdik. Bunu kontrol etmek için yüklü bir 1.7 bulamadım ama bir varlığın ana tablosunu değiştirme fikri çok kötü bir mimari karar gibi geliyor ... Eh, hafta sonumu mahvettin, şimdi bir CE1 bulup kurmam gerekiyor .7 ve kendi gözlerimle bu saçmalıklara bak ... karım bundan memnun olmayacak :)
MauroNigrele
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.