Alasan jawaban ColinM ini bekerja adalah karena kode di app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php
's addAttributeToFilter
metode. Jika Anda menggunakan format array ini, itu tidak memanggil addAttributeToSelect
. Dalam mode flat, addAttributeToSelect
gagal 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 joinAttribute
Metode 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 left
gabungan di sana, untuk memastikan bahwa ia mengambil produk jika my_custom_attribute
tidak diatur pada produk-produk itu. Ubah itu untuk inner
jika Anda hanya tertarik pada baris my_custom_attribute
yang 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