ColinM cevabı işleri nedeni kodda olduğu app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php'nin addAttributeToFilteryöntemiyle. Bu dizi biçimini kullanırsanız, çağırmaz addAttributeToSelect. Düz modda, addAttributeToSelectöznitelik düz tabloda değilse sessizce başarısız olur.
(aşağıda benim cevabın bir yeniden karma /programming/6271284/can-i-add-other-attributes-to-magentos-flat-product-catalog-table/17021620 - Ben Görgü kurallarının ne olduğundan emin değilim ama bunu yararlı bulacağımı biliyorum)
Ben düz olmayan öznitelikleri seçme ve filtreleme düz mod toplama için "temiz" bir çözüm istedim, hangi:
- özelliğin admin'de belirli ayarlara sahip olmasını gerektirmez (bir kullanıcı tarafından eklenebilir veya kullanıcı arabiriminde gizli olabilir)
- hem düz hem de düz olmayan mod için çalışır
İlişkili ürün koleksiyonunu kullandım, ancak bu tüm EAV koleksiyonları için geçerlidir.
Hata kodu:
$_product = Mage::getModel('catalog/product')->loadByAttribute( 'sku', 'ABC123' );
$coll = $_product->getTypeInstance()->getAssociatedProductCollection()
->addAttributeToSelect( 'my_custom_attribute' )
->addAttributeToFilter( 'my_custom_attribute', 3 )
;
Düz modda, yukarıdaki kod, düz tabloda yer almıyorsa, niteliği sessizce seçemez veya filtreleyemez.
Seçime ekleniyor:
$_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' )
;
joinAttributeYöntem istenen özellik için sorguya katılmak ekler. Özellik zaten düz tablodayken hala çalışır, ancak yalnızca düz tabloyu kullanmaktan biraz daha az verimli olacaktır.
Bu ürünlerde ayarlanmamışsa leftürünleri getirmesini sağlamak için orada bir birleşim kullandım my_custom_attribute. innerYalnızca my_custom_attributeayarlanan satırlarla ilgileniyorsanız bunu değiştirin .
Filtreye ekleme (yukarıdaki ColinM uyarınca):
$_product = Mage::getModel('catalog/product')->loadByAttribute( 'sku', 'ABC123' );
$coll = $_product->getTypeInstance()->getAssociatedProductCollection()
->addAttributeToFilter( array( array( 'attribute' => 'my_custom_attribute', 'eq' => 3 ) ) )
;
Yukarıdaki kod, filtreyi seçmenin yanı sıra seçime ekleyecektir.
(CE 1.6.2.0'da test edilmiştir)
non-flat attribute? Teşekkür It zaten kafa karıştırıcı karmakarışık do not make magento .ve