Alasan jawaban ColinM ini bekerja adalah karena kode di app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php's addAttributeToFiltermetode. Jika Anda menggunakan format array ini, itu tidak memanggil addAttributeToSelect. Dalam mode flat, addAttributeToSelectgagal secara diam-diam jika atribut tidak ada di tabel rata.
(di bawah ini adalah hash dari jawaban saya di /programming/6271284/can-i-add-other-attributes-to-magentos-flat-product-catalog-table/17021620 - Saya tidak yakin apa etiket untuk itu tetapi tahu saya akan merasa terbantu)
Saya menginginkan solusi "bersih" untuk memilih dan memfilter koleksi mode-datar pada atribut non-datar, yang:
- tidak memerlukan atribut untuk memiliki pengaturan khusus di admin (mungkin ditambahkan oleh pengguna, atau disembunyikan di ujung depan)
- berfungsi untuk mode flat dan non-flat
Saya menggunakan koleksi produk terkait, tetapi ini berlaku untuk setiap koleksi EAV.
Kode gagal:
$_product = Mage::getModel('catalog/product')->loadByAttribute( 'sku', 'ABC123' );
$coll = $_product->getTypeInstance()->getAssociatedProductCollection()
->addAttributeToSelect( 'my_custom_attribute' )
->addAttributeToFilter( 'my_custom_attribute', 3 )
;
Dalam mode flat, kode di atas diam-diam gagal memilih atau memfilter atribut jika kebetulan tidak ada dalam tabel datar.
Menambahkan ke pilih:
$_product = Mage::getModel('catalog/product')->loadByAttribute( 'sku', 'ABC123' );
$coll = $_product->getTypeInstance()->getAssociatedProductCollection()
->joinAttribute( 'my_custom_attribute', 'catalog_product/my_custom_attribute', 'entity_id', null, 'left' )
->addAttributeToSelect( 'my_custom_attribute' )
;
The joinAttributeMetode menambahkan bergabung untuk query untuk atribut tertentu yang diminta. Ini masih berfungsi ketika atribut sudah ada di tabel rata, tetapi akan sedikit kurang efisien daripada hanya menggunakan tabel datar.
Saya telah menggunakan leftgabungan di sana, untuk memastikan bahwa ia mengambil produk jika my_custom_attributetidak diatur pada produk-produk itu. Ubah itu untuk innerjika Anda hanya tertarik pada baris my_custom_attributeyang diatur.
Menambahkan ke filter (sesuai ColinM di atas):
$_product = Mage::getModel('catalog/product')->loadByAttribute( 'sku', 'ABC123' );
$coll = $_product->getTypeInstance()->getAssociatedProductCollection()
->addAttributeToFilter( array( array( 'attribute' => 'my_custom_attribute', 'eq' => 3 ) ) )
;
Kode di atas akan menambahkannya ke pilih serta mematuhi filter Anda.
(diuji pada CE 1.6.2.0)
non-flat attribute? Terima kasih. Dan jangan membuat magento membingungkan. Ini sudah membingungkan