Permintaan Filter Atribut Daftar Produk

12

Saya telah menambahkan satu filter dalam Metode _getProductCollection() kelas Mage_Catalog_Block_Product_List sebagai berikut.

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'"); 
    ...
}

Kode di atas berfungsi dengan baik pada Magento Versi 1.7. Tetapi setiap kali saya menulis kode berikut, itu memberi

Kolom tidak ditemukan: 1054 Kolom tidak dikenal 'e.type_id' di 'where clause'

kesalahan.

Kode (yang tidak berfungsi).

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

Sekarang Pertanyaan .

  1. Apakah akan ada dampak kinerja jika saya menggunakan kode kerja pertama?
  2. apakah ada cara lain untuk berkeliling untuk memiliki filter produk yang tepat?

MEMPERBARUI:

Setiap kali saya menerapkan kode berikut dan menggunakan rwdtema, saya tidak mendapatkan kesalahan. Tapi setiap kali saya pengguna defaulttema, saya mendapatkan kesalahan di bawah ini,

Kode

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

Kesalahan

SQLSTATE [42S22]: Kolom tidak ditemukan: 1054 Kolom tidak dikenal 'e.type_id' in 'where clause', permintaannya adalah: SELECT FLOOR ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 AS range, COUNT (*) SEBAGAI countDARI catalog_product_index_priceAS e INNER JOIN catalog_category_product_indexAS cat_indexON cat_index.product_id = e.entity_id DAN cat_index.store_id = 1 AND cat_index.visibility DI (2, 4) DAN cat_index.category_id = '3' WHERE ( e. type_idIN ( 'sederhana' )) AND (e.website_id = '1') AND (e.customer_group_id = 0) DAN (e.min_harga TIDAK NULL) KELOMPOK DENGAN LANTAI ((ROUND ((e.min_price) * 1, 2)) / 10) +1 PESANAN DENGAN LANTAI ((ROUND ((e.min_harga) * 1, 2)) / 10) + 1 ASC

Magento Learner
sumber
versi magento yang kamu gunakan ?? * & telah menerapkan tambalan magento
Amit Bera
1
wtf? sekarang masuk akal ... saya mencoba lebih dari EE 1.14 pada RWD, itu hanya tidak dapat diterima, bagaimana tema tampilan dapat mengubah seluruh permintaan bahkan terburuk bagaimana bisa mengubah tabel utama ... ini tidak bisa apa-apa selain bug . Pelajar @Magento dilakukan dengan baik!
MauroNigrele
Tepatnya, tema tampilan menimbulkan masalah. Terima kasih. Kode harus independen dari suatu tema
Magento Learner

Jawaban:

0

Saya pikir itu:

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

Harus bekerja, Anda tidak perlu menambahkan type_iduntuk selectkarena merupakan catalog_product_entitykolom dan itu diambil secara default. Saya selalu menyarankan untuk mencatat permintaan terakhir untuk mendapatkan ide terbaik tentang apa yang terjadi:

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

BTW: Blok kode pertama tidak masuk akal sama sekali karena Anda bergabung dengan tabel utama ( catalog_product_entity) untuk dirinya sendiri.

MauroNigrele
sumber
"di Magento 1.7 mereka melakukan optimasi pada sql pilih yang digunakan untuk opsi penyaringan harga. Mereka menghapus bagian FROM sql (yang merupakan entitas produk - yang berisi atribut type_id) dan membuat tabel terkait price_index yang utama - yang yang digunakan di bagian DARI kueri. Jadi pada dasarnya tabel dari mana data dipilih bukan tabel entitas produk lagi (Anda kehilangan semua atribut basis produk) tabel utama menjadi indeks produk. Ini adalah pembaruan inti yang tim Magento ditambahkan mulai versi 1,7. " Rujuk yang berikut
Magento Learner
1
wooow rakyat kesalahan saya, untuk beberapa alasan, saya berpikir dalam metode getCollection blok backend, jadi dalam skenario ini kode pertama Anda ok saya tidak yakin apakah itu solusi terbaik tetapi tampaknya ok. Maaf
MauroNigrele
@ MagentoLearner Anda yakin tentang pos itu? Saya baru saja memeriksa ulang pada EE1.14 saya telah menginstal dan masih menggunakan catalog_product_entity sebagai tabel utama, kecuali ketika Anda mengatur untuk menggunakan katalog datar (benar-benar disarankan) tetapi dalam kedua kasus Anda memiliki type_id hadir di pilih. Bisakah Anda mencatat pertanyaan seperti yang saya tulis di Jawaban asli?
MauroNigrele
1
mmmm menarik ... saya Juga memeriksa permintaan dalam kasus pencarian dan menggunakan catalog_product_entity sebagai tabel utama, mungkin "tim magento" telah memutuskan untuk mengembalikan perubahan itu. Saya tidak dapat menemukan 1,7 yang terinstal untuk memeriksanya tetapi gagasan untuk mengubah tabel utama suatu entitas terdengar seperti keputusan arsitektur yang sangat buruk ... Perhatikan bahwa Anda baru saja merusak akhir pekan saya, sekarang saya harus mencari dan menginstal CE1 .7 dan lihat omong kosong ini dengan mata saya sendiri ... istri saya tidak akan senang dengan ini :)
MauroNigrele